1

我在汇编中编写了一个简单的“Hello World”程序:

global  _main
extern  _printf

section .text
_main:
    push  offset  message
    call  _printf
    add   esp, 4
    ret
section .data
    message db  'Hello, World2', 10, 0

我已经在Ghidra工具(免费软件IDA替代品)中打开了编译的 .EXE,当我查看生成的汇编代码列表时,有这样的东西:

 push  message
 call  _printf
 add   esp,0x4

我的问题是:为什么那里没有offset关键字(就像在源代码中一样)?它是可选的吗?此外,当我想修补指令时,该工具不允许我输入offset关键字...

4

1 回答 1

2

汇编者属于两种信仰之一。

需要方括号来读/写内存的汇编器不需要offset标签来引用标签的偏移量。这是N ASM 风格。
这些汇编程序可以允许或禁止使用offset.

不需要方括号来读/写内存的汇编器将需要offset标签来引用标签的偏移量。这是M ASM 风格。

于 2021-02-08T16:51:59.937 回答