Gcc “这是为了什么?”;fclose“;你发球吗?

Gcc “这是为了什么?”;fclose“;你发球吗?,gcc,optimization,x86,Gcc,Optimization,X86,我正在分解自己的一些代码,以了解更多关于x86的信息,并在gcc下使用-Ofast编译时发现了这个有趣的模式。此“fclose”功能的用途是什么?它似乎没有以任何意外的方式影响我的程序的执行 您突出显示的地址似乎没有任何符号与之关联,因此反汇编程序只使用了最近的符号fclose@plt并计算其偏移量(在本例中,0x10字节在fclose@plt)。fclose实际上唯一的相关性是它就在突出显示的地址之后的内存中 如果您查看该地址的所有jmp指令,您将看到它们被标记为\u init+0x30,因此

我正在分解自己的一些代码,以了解更多关于x86的信息,并在gcc下使用-Ofast编译时发现了这个有趣的模式。此“fclose”功能的用途是什么?它似乎没有以任何意外的方式影响我的程序的执行


您突出显示的地址似乎没有任何符号与之关联,因此反汇编程序只使用了最近的符号
fclose@plt
并计算其偏移量(在本例中,
0x10
字节在
fclose@plt
)。
fclose
实际上唯一的相关性是它就在突出显示的地址之后的内存中


如果您查看该地址的所有
jmp
指令,您将看到它们被标记为
\u init+0x30
,因此(出于任何原因)它选择了不同的相对符号。

嗯,不。我知道@plt是什么,但是为什么有2个fclose,为什么在完全不相关的函数之后调用“其他”fclose,比如memset/fopen/malloc等等……它以某种方式处理共享库函数。我也注意到了这一点,但问题仍然是,这段代码在做什么?同样,如果没有任何jmp/ret,该函数是否会落入fclose?不,请看第24行,有一条
jmp
指令-基本上,它将获取例如
fclose
的地址,因此下次调用它时,它将跳转到实际函数,而不是泛型查找。通过查找“elf plt”或“elf got”,您可以找到更多(更好)的信息。