带有OFFSET标记的汇编PUSH指令



我用汇编语言写了一个简单的" 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关键字…

汇编程序属于两种信仰之一。

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

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