【发布时间】:2010-10-07 03:45:10
【问题描述】:
我目前正在开发一个 x86 反汇编程序,并开始反汇编一个 win32 PE 文件。大部分反汇编代码看起来不错,但是有一些非法 0xff /7 操作码的出现(/7 表示 reg=111,0xff 是操作码组 inc/dec/call/callf/jmp/jmpf/push/非法 操作数 r/m 16/32)。第一个猜测是,/7 是 pop 指令,但它是用 0x8f /0 编码的。我已经对照官方的英特尔架构软件开发人员手册第 2 卷:指令集参考检查了这一点 - 所以我不只是被误导了。
反汇编示例:(S0000O0040683a 是被另一条指令跳转到的标签)
S0000O0040683a: inc edi ; 0000:0040683a ff c7
test dword ptr [eax+0xff],edi ; 0000:0040683c 85 78 ff
0xff/7 edi ; 0000:0040683f ff ff
顺便说一句:gdb 对它进行同样的反汇编(除了错误 0xff 在我的反汇编中没有产生 -1):
(gdb) disassemble 0x0040683a 0x00406840
Dump of assembler code from 0x40683a to 0x406840:
0x0040683a: inc %edi
0x0040683c: test %edi,0xffffffff(%eax)
0x0040683f: (bad)
End of assembler dump.
所以问题是:Windows的非法操作码异常处理程序中是否有任何默认处理程序,它实现了这个非法操作码中的任何功能,如果有:那里发生了什么?
问候,博多
【问题讨论】:
-
如果您使用调试器介入会发生什么?
-
大量的FF字节比较可疑。
-
>> 你似乎已经提交了两次这个问题。您可能应该删除一个 - Nathan Fellman(10 分钟前)感谢您的提示 -> 完成。首次提交问题时,我收到一条错误消息,但由于消息没有显示,我再次发布(然后没有错误消息)。