反汇编器GLOBAL关键字
Disassembler GLOBAL keyword
在c++程序的反汇编视图中,GLOBAL
指的是什么?我有一个符号写着:
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邮件列表:
_GLOBAL__I__XXX
的符号用于静态初始化项,即:在启动时执行的代码,通常在调用main之前。不挂在实际的XXX -它只是一个神奇的混乱创造一个独特的符号。创建静态初始化函数来调用_Jv_RegisterClass将每个类注册到一个全局表中,所以未来的class。forName可以找到它们
这里讨论的是GCJ,但c++编译器的行为方式与GCJ相似。指向所有这些初始化器的指针被放入.ctors
部分,并在调用main()
之前由CRT启动代码调用。
注意,_GLOBAL__sub_I_myFile.cpp+106
只是反汇编程序生成标签的方式。它指向标签_GLOBAL__sub_I_myFile.cpp
之后的106字节,我认为这是一个"初始化静态对象"类型的函数。在这种情况下,要么是编译器/链接器重用了一些代码[因为你还没有发布它,我不能说],要么是一些自动生成的代码没有"在函数中"(例如,可能是一个异常抛出)。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 谷歌模拟和覆盖关键字
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- 在 c++ 中正确定义"this"关键字?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- C++ - 为什么这里需要'template'关键字?
- C++函数的关键字?
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- "friend"关键字在C++中是什么意思?
- 声明C++数组(带或不带 "new" 关键字)
- 对齐和对齐的实际用例C++关键字
- 在 c++ 中三元运算符中不允许继续(关键字)吗?
- 反汇编器GLOBAL关键字