什么是英特尔语法汇编中的EXTRN? [英] What is EXTRN in Intel-syntax assembly?

查看:0
本文介绍了什么是英特尔语法汇编中的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆