gpt4 book ai didi

c++ - 反汇编程序 GLOBAL 关键字

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:40 24 4
gpt4 key购买 nike

在 C++ 程序的反汇编 View 中,引用 GLOBAL 的内容?我有一个 lign 说:

je 0xb74d334a <_GLOBAL__sub_I_myFile.cpp+106>

我猜这是对 myFile.cpp 的调用,但我想知道调用前 GLOBAL 字的含义 ...

myFile.cpp 的内容:

[include guards]
#include <mutex.hpp> // Functions I use to handle mutex
namespce myNameSpace {
class myClass {
public:
static void stdOutFormat(const char* format, ...);
private:
static Mutex(Synchro) // Custom functions from mutex.hpp and others ...
};
}
[end include guards]

反汇编(我尽量简洁):

[some calls]
call 0xb74d1b80 <os_mutexInit@plt>
test %esi, %esi
je 0xb74d33a <_GLOBAL__sub_I_myFile.cpp+106>
mov (%esi), %eax
[some calls]

最佳答案

此类符号用于编译器生成的静态初始值设定项。来自GCJ mailing list :

Symbols of the _GLOBAL__I__XXX are used for static initializers - i.e. code that executed on startup, normally before main is called. Don't get hung up on the actual XXX - it is just a magic mangling to create a unique symbol. Gcj creates static initializer functions that call _Jv_RegisterClass to register each class in a global table, so future Class.forName can find them.

这里讨论的是 GCJ,但 C++ 编译器的行为方式类似。指向所有此类初始化器的指针都放入 .ctors 部分,并在调用 main() 之前由 CRT 启动代码调用。

关于c++ - 反汇编程序 GLOBAL 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15901717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com