Если вы используете язык ассемблера, вы можете получить _GLOBAL_OFFSET_TABLE_
адрес без get_pc_thunk
.
Это хитрый способ.:)
Вот пример кода:
$ cat test.s
.global main
main:
lea HEREIS, %eax # Now %eax holds address of _GLOBAL_OFFSET_TABLE_
.section .got
HEREIS:
$ gcc -o test test.s
Это доступно, поскольку секция .got
примыкает к <.got.plt>
Следовательно, символ HEREIS
и _GLOBAL_OFFSET_TABLE_
найти по тому же адресу.
PS.Вы можете проверить, работает ли он с помощью objdump.
Disassembly of section .got:
080495e8 <HEREIS-0x4>:
80495e8: 00 00 add %al,(%eax)
...
Disassembly of section .got.plt:
080495ec <_GLOBAL_OFFSET_TABLE_>:
80495ec: 00 95 04 08 00 00 add %dl,0x804(%ebp)
80495f2: 00 00 add %al,(%eax)
80495f4: 00 00 add %al,(%eax)