漫漫山麓 2024-08-25 20:06 采纳率: 50%
浏览 2
已结题

为什么一段代码反汇编有两种不同结果?

为什么一段代码反汇编有两种不同结果?
ndisasm

00009000  F30F1EFA          endbr64
00009004  48                dec ax
00009005  83EC08            sub sp,byte +0x8
00009008  48                dec ax
00009009  8B05              mov ax,[di]
0000900B  B1F6              mov cl,0xf6
0000900D  0900              or [bx+si],ax
0000900F  48                dec ax
00009010  85C0              test ax,ax
00009012  7402              jz 0x9016
00009014  FFD0              call ax
00009016  48                dec ax
00009017  83C408            add sp,byte +0x8
0000901A  C3                ret

objdump -M intel

    9000: f3 0f 1e fa                      endbr64
    9004: 48 83 ec 08                      sub    rsp, 0x8
    9008: 48 8b 05 b1 f6 09 00             mov    rax, qword ptr [rip + 0x9f6b1]
    900f: 48 85 c0                         test    rax, rax
    9012: 74 02                            je    0x9016
    9014: ff d0                            call    rax
    9016: 48 83 c4 08                      add    rsp, 0x8
    901a: c3                               ret

对于一段二进制不同的分割造成不同的结果,所以X86汇编有歧义是吗?

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-25 20:07
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    反汇编的结果可能因反汇编器的不同而有所不同。不同的反汇编器可能会采用不同的策略来解析二进制代码,因此生成的汇编代码可能会有所不同。在您提供的示例中,ndisasmobjdump -M intel生成的汇编代码确实存在差异。

    这些差异主要是由于两个反汇编器在处理指令和寄存器方面的不同。例如,ndisasm使用了16位寄存器(如ax、sp等),而objdump -M intel使用了64位寄存器(如rax、rsp等)。此外,两个反汇编器在处理内存操作数时也有所不同,这可能导致生成的汇编代码在语法上有所不同。

    尽管这些差异可能会导致汇编代码看起来不同,但它们通常表示相同的底层二进制代码。因此,在大多数情况下,这些差异不会对程序的实际行为产生影响。然而,在某些特殊情况下,不同的反汇编策略可能会导致歧义或错误的汇编代码。在这种情况下,需要仔细检查和分析原始二进制代码以确定正确的解释。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 修改了问题 8月25日
  • 创建了问题 8月25日

悬赏问题

  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关