【问题标题】:what is the difference between ds:0x402000 and DWORD PTR ds:0x402000 in x86 assembly?x86 程序集中的 ds:0x402000 和 DWORD PTR ds:0x402000 有什么区别?
【发布时间】:2019-03-28 08:51:56
【问题描述】:

正如您在图片中看到的,我无法理解 DWORD PTR ds:0x402000 和 ds:0x402000 之间的区别。它们之间的语法区别是什么。两者都从 0x402000 获取 4 个字节并将其存储在 eax 和 ecx 寄存器中。但是为什么语法不同?

【问题讨论】:

  • 但是为什么语法不同呢?我尝试使用 nasm 和 gas 组装器。他们仍然不同。
  • 请不要发布屏幕输出或源代码的图像。将代码复制并粘贴到您的问题中(编辑问题),选择它并按问题编辑器工具栏中的{} 按钮使其显示为代码。

标签: x86 reverse-engineering disassembly machine-code


【解决方案1】:

没有区别。不过,EAX 的加载使用的是短格式编码。

我无法从您糟糕的文本图像中复制/粘贴任何内容,但请注意http://felixcloutier.com/x86/MOV.html 中有一个特殊的A1 操作码用于加载到 AX/EAX/RAX。出于某种原因,objdump 决定在这种情况下省略DWORD PTR。

寄存器已经隐含了 DWORD 操作数大小,因此不需要。

(我们可以看出这是 32 位代码,而不是 x86-64,因为该操作码将在长模式下使用 64 位绝对地址,除非有地址大小前缀。)

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2010-10-05
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2011-03-14
    • 2016-08-08
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多