call すると EIP が stack につまれることを利用して EIP を取ってきている
do_something:
pushl %ebp
movl %esp, %ebp
'''call __i686.get_pc_thunk.cx'''
addl $_GLOBAL_OFFSET_TABLE_, %ecx
movl some_data@GOT(%ecx), %eax
movl (%eax), %eax
addl %eax, %eax
movl %eax, %edx
sall $5, %edx
addl %edx, %eax
popl %ebp
ret
__i686.get_pc_thunk.cx:
'''movl (%esp), %ecx'''
ret
なんで EIP が必要かというと、PIC はどこにでもロードできなければならないので、データ取ってくる時に絶対参照じゃなくて相対参照しないといけないから