Это возможно, но чрезвычайно сложно и займет огромное количество времени, даже если вы довольно хорошо разбираетесь в C, сборке и тонкостях операционной системы, в которой этот код должен работать.
Проблема в том, что оптимизация делает скомпилированный код едва узнаваемым / понятным для людей.
Кроме того, будут неясности, если дизассемблер потеряет информацию (например, одна и та же инструкция может быть закодирована различными способами и если остальная часть кода зависит от конкретной кодировки, которую многие дизассемблеры (или их пользователи) не принимают во внимание результирующая разборка становится неполной или неправильной).
Самоизменяющийся код также усложняет ситуацию.
См. В этот вопрос Подробнее о теме и доступных инструментах.