Я занимаюсь сборкой и разборкой.
Речь идет об изменении формата разборки (сгенерированного objdump
) в форму, которую можно собрать.
Проблема была ..
Когда я разобрал двоичные файлы, используя objdump
,
Я видел следующие инструкции:
(Это псевдоинструкция, добавляемая GCC
, которая действует как многобайтовый nop.)
80493ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
80494b9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
8049b19: 8d bc 27 00 00 00 00 lea 0x0(%edi,%eiz,1),%edi
Чтобы собрать его, я изменил формат инструкции, как показано ниже:
.global main
main:
lea 0x0(%esi,%eiz,1),%esi
lea 0x0(%esi,%eiz,1),%esi
lea 0x0(%edi,%eiz,1),%edi
Я сохранил вышеуказанный файл и попытался собрать его в двоичный файл.
Однако это не удалось. Результаты были следующими:
$ gcc -o eiz_ex eiz_ex.s -m32
eiz_ex.s: Assembler messages:
eiz_ex.s:3: Error: bad register name '%eiz'
eiz_ex.s:4: Error: bad register name '%eiz'
eiz_ex.s:5: Error: bad register name '%eiz'
Я могу просто заменить инструкцию, содержащую псевдоинструкцию, на nop
, чтобы сделать рабочий бинарный файл.
пр) изменить инструкцию 0x0(%esi,%eiz,1),%esi
на nop
Тем не менее, я хочу собрать его и
получить тот же шаблон байтов, что и исходный двоичный файл.
Например
lea 0x0(%esi,%eiz,1),%esi
- сборка -> 8d 74 26 00
У вас есть идея собрать его ??