gpt4 book ai didi

windows - x86 汇编 - Windows 下的非法操作码 0xff/7

转载 作者:可可西里 更新时间:2023-11-01 13:55:14 27 4
gpt4 key购买 nike

我目前正在开发一个 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的非法操作码异常处理程序中是否有默认处理程序,它实现了这个非法操作码中的任何功能,如果有:那里发生了什么?

问候,博多

最佳答案

在让我的反汇编器以与 gdb 完全相同的语法生成输出后,经过许多额外的时间,我可以区分这两个版本。这在我的反汇编程序中揭示了一个相当尴尬的错误:我忘了考虑,0x0f 0x8x 跳转指令有一个两字节的操作码(加上 rel16/32 操作数)。所以每个 0x0f 0x8x 跳转目标都被一个导致在现实中无法访问的代码关闭。修复此错误后,不再反汇编 0xff/7 操作码。

感谢所有回答我的问题(并对答案发表评论)并因此至少试图帮助我的人。

关于windows - x86 汇编 - Windows 下的非法操作码 0xff/7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com