英特尔语法汇编中的 EXTRN 是什么?
What is EXTRN in Intel-syntax assembly?
x86 CPU:MSVC (2010)
EXTRN _printf:PROC
在下面的代码中是什么意思以及为什么在“:
”之后我们使用一些“PROC
”指令而不是“near
”或“far
"?
CONST SEGMENT
$SG3830 DB 'hello, world', 0AH, 00H
CONST ENDS
PUBLIC _main
EXTRN _printf:PROC <- what is this funct?!
_TEXT SEGMENT
_main PROC
push ebp
mov ebp, esp
push OFFSET $SG3830
call _printf
add esp, 4
xor eax, eax
pop ebp
ret 0
_main ENDP
_TEXT ENDS
您似乎正在阅读 Dennis Yurichev 的 Reverse Engineering for Beginners。在 32 位 FLAT 模型中,所有内容都被视为 NEAR 指针(在 4Gib 地址 space 内)。 NEAR/FAR 的概念适用于诸如 DOS 程序的分段地址模型之类的东西。您正在查看的代码是来自 MSVC 编译器 (CL) 的 32 位 Windows 控制台程序的汇编代码。
EXTRN
只是意味着有一个符号的外部链接,它是一个函数/PROCedure 在一些其他 module/library/object 中最终将被链接到.如果没有 EXTRN 指令,call _printf
将产生错误,因为 _printf
函数未在当前程序集文件中定义。
x86 CPU:MSVC (2010)
EXTRN _printf:PROC
在下面的代码中是什么意思以及为什么在“:
”之后我们使用一些“PROC
”指令而不是“near
”或“far
"?
CONST SEGMENT
$SG3830 DB 'hello, world', 0AH, 00H
CONST ENDS
PUBLIC _main
EXTRN _printf:PROC <- what is this funct?!
_TEXT SEGMENT
_main PROC
push ebp
mov ebp, esp
push OFFSET $SG3830
call _printf
add esp, 4
xor eax, eax
pop ebp
ret 0
_main ENDP
_TEXT ENDS
您似乎正在阅读 Dennis Yurichev 的 Reverse Engineering for Beginners。在 32 位 FLAT 模型中,所有内容都被视为 NEAR 指针(在 4Gib 地址 space 内)。 NEAR/FAR 的概念适用于诸如 DOS 程序的分段地址模型之类的东西。您正在查看的代码是来自 MSVC 编译器 (CL) 的 32 位 Windows 控制台程序的汇编代码。
EXTRN
只是意味着有一个符号的外部链接,它是一个函数/PROCedure 在一些其他 module/library/object 中最终将被链接到.如果没有 EXTRN 指令,call _printf
将产生错误,因为 _printf
函数未在当前程序集文件中定义。