【发布时间】:2021-02-08 16:42:04
【问题描述】:
我用汇编编写了一个简单的“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 语法,只是其中有一个对 NASM 无效的
offset。 -
Ghidra 如何反汇编像
push [disp32]这样的指令而不是push imm32?例如NASMpush dword [message]与 NASMpush message。每个汇编语法都需要某种方法来区分这两种形式。
标签: windows assembly x86 ghidra