Assembly 英特尔语法汇编中的EXTRN是什么?
x86CPU:MSVC(2010) 在下面的代码中,Assembly 英特尔语法汇编中的EXTRN是什么?,assembly,x86,masm,cl,intel-syntax,Assembly,X86,Masm,Cl,Intel Syntax,x86CPU:MSVC(2010) 在下面的代码中,EXTRN\u printf:PROC是什么意思?为什么在“:”之后我们使用一些“PROC”指令而不是“近的”或“远的” CONST段 $SG3830 DB“你好,世界”,0AH,00H 常数结束 公共交通干线 EXTRN_printf:PROC似乎您正在阅读Dennis Yurichev的《初学者逆向工程》。在32位平面模型中,所有内容都被视为近指针(在4Gib地址空间内)。近/远的概念适用于DOS程序的分段地址模型。您正在查找的代码是32位
EXTRN\u printf:PROC
是什么意思?为什么在“:
”之后我们使用一些“PROC
”指令而不是“近的
”或“远的
”
CONST段
$SG3830 DB“你好,世界”,0AH,00H
常数结束
公共交通干线
EXTRN_printf:PROC似乎您正在阅读Dennis Yurichev的《初学者逆向工程》。在32位平面模型中,所有内容都被视为近指针(在4Gib地址空间内)。近/远的概念适用于DOS程序的分段地址模型。您正在查找的代码是32位Windows控制台程序的MSVC编译器(CL)的汇编代码
只是意味着有一个符号的外部链接,该符号是最终链接到的其他模块/库/对象中的函数/过程。如果没有EXTRN指令,调用\u printf
将产生错误,因为当前汇编文件中未定义\u printf
函数。您阅读过汇编手册吗?它说了什么?如果您需要进一步的帮助,我需要知道您正在使用哪个特定的汇编程序进行编程。@fuz刚刚编辑了一个问题,如果您愿意的话。事实上,我认为这对任何基于英特尔的编译器都是一样的,所以没有提到。@Deno汇编程序和编译器是不同的。确保不要混淆它们。请注意,有许多汇编程序使用类似英特尔的语法。其中一个是MASM,MSVC附带的汇编程序。还有其他流行的汇编程序,如nasm、fasm和yasm。同样感谢您提供的信息。在下次询问之前,我将考虑如何使汇编程序合格。直到现在我还在想为什么人们不理解。。
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