0

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
4

1 回答 1

1

看来您正在阅读 Dennis Yurichev 的《初学者逆向工程》。在 32 位 FLAT 模型中,所有内容都被视为 NEAR 指针(在 4Gib 地址空间内)。NEAR/FAR 的概念适用于 DOS 程序的分段地址模型。您正在查找的代码是来自 32 位 Windows 控制台程序的 MSVC 编译器 (CL) 的汇编代码。

EXTRN只是意味着与符号存在外部链接,该符号是最终将链接到的其他模块/库/对象中的函数/ PROC edure。如果没有 EXTRN 指令,call _printf则会产生错误,因为该_printf函数未在当前程序集文件中定义。

于 2020-10-23T12:44:39.287 回答