如何使用伪寄存器汇编指令?

时间:2018-06-30 07:33:30

标签: assembly x86 disassembly att machine-code

我正在研究可拆卸组装。
这是关于将反汇编格式(由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

您有重新组装的想法吗?

0 个答案:

没有答案