Ключевое слово дизассемблер GLOBAL

В представлении дизассемблирования программы на 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]

2

Решение

Такие символы используются для генерируемых компилятором статических инициализаторов. От Список рассылки GCJ:

Символы _GLOBAL__I__XXX используются для статических инициализаторов — т.е.
код, который выполняется при запуске, обычно перед вызовом main. не
зацикливаться на фактическом XXX — это просто волшебное искажение, чтобы создать
уникальный символ Gcj создает статические функции инициализатора, которые вызывают
_Jv_RegisterClass для регистрации каждого класса в глобальной таблице, чтобы будущие Class.forName могли их найти.

Это говорит о GCJ, но компилятор C ++ ведет себя аналогичным образом. Указатели на все такие инициализаторы помещаются в .ctors секции и вызываются кодом запуска CRT перед вызовом main(),

4

Другие решения

Обратите внимание, что _GLOBAL__sub_I_myFile.cpp+106 это просто способ дизассемблера сделать этикетку. Он указывает на 106 байтов после метки _GLOBAL__sub_I_myFile.cppЯ ожидаю, что это функция типа «инициализировать статический объект». В данном случае это либо компилятор / компоновщик, повторно использующий некоторый код [поскольку вы не опубликовали его, я не могу сказать], либо это какой-то автоматически сгенерированный код, который не живет «в функции» (может быть исключение, например).

1

По вопросам рекламы [email protected]