Assembly 英特尔语法汇编中的EXTRN是什么?

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位

x86CPU:MSVC(2010)

在下面的代码中,
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