我正在研究可拆卸组装。
这是关于将反汇编格式(由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
您有重新组装的想法吗?