链接后,某些库函数如下所示。
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