什么是英特尔语法汇编中的EXTRN? [英] What is EXTRN in Intel-syntax assembly?
本文介绍了什么是英特尔语法汇编中的EXTRN?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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
推荐答案
似乎您正在阅读丹尼斯·尤里切夫的《初学者的逆向工程》。在32位平面模型中,所有内容都被视为近指针(在4Gib地址空间内)。近/远的概念适用于DOS程序的分段地址模型。您正在查看的代码是用于32位Windows控制台程序的MSVC编译器(CL)的汇编代码。
EXTRN
只是表示存在到符号的外部链接,该符号是最终将链接到的某个其他模块/库/对象中的函数/proc。如果没有EXTRN指令,call _printf
将产生错误,因为_printf
函数未在当前程序集文件中定义。
这篇关于什么是英特尔语法汇编中的EXTRN?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文