objdump输出中%?符号的含义是什么 402cce地址处是否为无效指令
关于objdump输出中
%?符号的含义说明 你给出的objdump输出片段如下:
402cca: 80 c6 28 add $0x28,%dh 402ccd: 9d popf 402cce: 8e 3e mov (%esi),%? 402cd0: 23 7b 05 and 0x5(%ebx),%edi 402cd3: fc cld 402cd4: b2 de mov $0xde,%dl
%?的含义:objdump在反汇编时遇到了合法操作码,但对应操作数的寄存器编码未被x86架构定义,无法识别出具体寄存器名称,就会输出%?作为占位符。你遇到的0x8e操作码对应mov 源操作数, 段寄存器指令,功能是将源操作数的值写入段寄存器,其后的ModR/M字节0x3e中,用来指定目标段寄存器的3位字段值为111(十进制7),而x86架构仅定义了6个段寄存器,编码范围为0~5,6和7属于保留无效编码,因此objdump无法匹配到对应段寄存器,输出%?。- 是否属于无效指令:在标准32/64位x86执行环境下,这是明确的无效指令,CPU执行到该指令时会触发
#UD(无效操作码)异常。 - 额外排查提示:出现这类异常反汇编结果,大概率是反汇编的地址偏移错误,误将数据段内容当作代码段解析,或是程序控制流跳转到了某条有效指令的中间位置,将指令的一部分当作新的操作码解析导致,你可以先确认反汇编的地址范围是否对应程序的可执行代码段。
内容的提问来源于stack exchange,提问作者mxw
相关产品推荐
相关产品推荐

