Есть ли дизассемблер, который генерирует исходный код компилируемой сборки? - PullRequest
0 голосов
/ 13 ноября 2010

Я хотел бы знать, есть ли какой-либо дизассемблер (платформа) платформы Windows, который может генерировать исходный код сборки, который также компилируется ассемблером?

Поскольку дизассемблер может генерировать код сборки на основе файла EXEВозможно ли использовать ассемблерный код непосредственно в качестве исходного кода, а затем исходный код должен быть скомпилирован ассемблером, например NASM?

Ответы [ 4 ]

1 голос
/ 26 июля 2011

Вы теряете некоторую информацию при разборке исполняемого файла, поэтому вы вряд ли получите полностью работающий исполняемый файл при сборке разборки.Если вы сообразительны, вы можете извлекать отдельные функции из исполняемого файла, но не из всей программы.

Дизассемблер objconv может создавать ассемблерный код в синтаксисе masm, nasm, yasm и gas.

1 голос
/ 13 ноября 2010

Я исправляю исполняемый файл непосредственно в отладчике и затем сохраняю измененный исполняемый файл.

Декомпиляция и последующая перекомпиляция - это хрупкий процесс, поскольку любое изменение позиции повторно собранного кода может привести к поломке программы.И я думаю, что есть несколько двоичных представлений определенных команд asm, которые еще больше усложняют ситуацию.

1 голос
/ 13 ноября 2010

IDA может генерировать исходный код.Но в большинстве случаев вы не можете редактировать его.Предположим, следующий код:

 loc_401020:
    ret

 ; ...

 dd 0FFFFFFFFh, 0, 1, 401020h, 0
 ;                    ^^^^^^^ can you find it in big real program?

до вставьте любые новые байты для вас должны быть уверены, что любые sub_XXXX или loc_XXXX останутся с тем же смещением, либо вы должны заменить все его ссылкина метки.

Если вы не перемещаете какой-либо код, вам не нужно его перекомпилировать - просто исправьте и, возможно, расширьте раздел кода.

1 голос
/ 13 ноября 2010

Я думаю, что IDA в этом неплохо справляется.

В любом случае, основная проблема заключается в том, что сгенерированный ассемблерный код будет довольно нечитаемым и его будет очень сложно поддерживать (без имен переменных, имен функций и подписей)хотя технически это был бы код ASM, все же лучше использовать IDA в качестве умного редактора для вывода этой информации.

...