Некоторая библиотечная функция показана ниже, как ссылка.
0x0804842e <+35>: call 0x80482e0 <printf@plt>
Итак, я понял использование @plt
при разборке.
Однако вчера у меня был какой-то странный фрагмент кода.
Ниже приведена часть libstdbuf.s
, включенная в Coreutils
:
.L31:
.loc 1 142 0
testl %edi, %edi
je .L32
.loc 1 143 0
movl stdin@GOT(%ebx), %eax # <========= here
movl %edi, %edx
Как видите,код обращается к stdin@GOT
.
Хм ... Я никогда раньше не видел синтаксис blabla@GOT
.
Вопрос:
Что именно stdin@GOT(%ebx), %eax
линия делает?
Это сгенерированный компоновщиком код?Если да , почему это GOT
вместо PLT
?
- И .. Как я могу узнать
stdin@GOT
адресную информацию?
(в отличие от общих глобальных символов, адрес не отображается в таблице символов. См. Ниже)
.
jiwon@jiwon$ objdump -t -T ./libstdbuf.so | grep stdin
00000000 O *UND* 00000000 stdin@@GLIBC_2.0
00000000 DO *UND* 00000000 GLIBC_2.0 stdin