C / C ++中是否提供全局偏移表(GOT)指针?

时间:2015-10-22 07:11:36

标签: c pointers gcc assembly

我正在尝试追踪少数用户报告的问题。我目前无法重现它,但我怀疑这个问题与使用PIC和内联汇编有关。

PIC使用全局偏移表(GOT),内联汇编必须根据ABI保留EBXRBX。我已审核了代码,似乎会根据需要保留EBXRBX。但这并不意味着生成的代码与预期一致,因为GCC会在其认为合适的情况下交错指令。所有GCC保证都是连续的(即我的ASM不会被重新排序)。

我想使用类似于以下代码来调试调试版本:

volatile void* got1 = GlobalOffsetTablePointer();

// Call a routine that uses inline assembly

volatile void* got2 = GlobalOffsetTablePointer();

assert(got1 = got2);

我遇到的问题是我无法找到函数GlobalOffsetTablePointer。我已经怀疑与内联汇编的错误交互,所以我试图避免更多的内联汇编来获取GOT指针。

C / C ++中是否提供全局偏移表(GOT)指针?如果是这样,我该如何访问它?

0 个答案:

没有答案