Regarding GOT table in PIC code
Chethan Palakshamurthy
pchethan@gmail.com
Mon Jan 9 10:47:00 GMT 2012
Hi,
This is regarding GOT in PIC code.
I have built a shared object library with simple hello function
printing the contents of a global variable (say p). When I use objdump
the code shows the function referencing the variable address from a
GOT table index. (see dump below).
The code is such that the offset of GOT from SP is already decided at
link time in the shared object file (0x1b1c, as I can see from
objdump).
This makes me ask -
1. Does the dynamic linker map the physical pages for .data segments
such that GOT is at a fixed offset from code in logical address space?
is this true?
2. Aren't the variables themselves at a fixed offset from GOT (since
GOT is part of data segment)? So, can't the code just access the data
relative to PC with a single indirection?
000004cc <hello>:
4cc: 55 push ebp
4cd: 89 e5 mov ebp,esp
4cf: 53 push ebx
4d0: 83 ec 14 sub esp,0x14
4d3: e8 ef ff ff ff call 4c7 <__i686.get_pc_thunk.bx>
4d8: 81 c3 1c 1b 00 00 add ebx,0x1b1c
<----------------------offset
4de: 8b 83 f4 ff ff ff mov eax,DWORD PTR [ebx-0xc]
4e4: 8b 00 mov eax,DWORD PTR [eax]
4e6: 89 c1 mov ecx,eax
4e8: 8b 83 f8 ff ff ff mov eax,DWORD PTR [ebx-0x8]
4ee: 8b 10 mov edx,DWORD PTR [eax]
4f0: 8d 83 90 e5 ff ff lea eax,[ebx-0x1a70]
4f6: 89 4c 24 08 mov DWORD PTR [esp+0x8],ecx
4fa: 89 54 24 04 mov DWORD PTR [esp+0x4],edx
4fe: 89 04 24 mov DWORD PTR [esp],eax
501: e8 d2 fe ff ff call 3d8 <printf@plt>
506: 83 c4 14 add esp,0x14
509: 5b pop ebx
50a: 5d pop ebp
50b: c3 ret
Regards,
Chethan
More information about the Gcc-help
mailing list