я могу собрать инструкцию, используя псевдорегистр? - PullRequest
0 голосов
/ 30 июня 2018

Я занимаюсь сборкой и разборкой.
Речь идет об изменении формата разборки (сгенерированного 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

У вас есть идея собрать его ??

...