got,plt表学习记录

got表和plt表


#include <stdio.h>
#include <stdlib.h>

int main(int argc,argv** argv)
{
    int n=argc;
    printf("%d\n",n);
    printf("%d\n",n);
}

以下两步分别用pwntools和objdump查看got表和plt表

用pwntools获取got表和plt表

>>>from pwn import*
>>>elf=ELF("a.out")
>>>print "0x"+"%x" %elf.symbols['printf']
0x80482e0
>>> print "0x"+"%x" %elf.got['printf']
0x804a00c

再使用objdump

>>>objdump -d -j .plt a.out

080482e0 <printf@plt>:
 80482e0:   ff 25 0c a0 04 08       jmp    *0x804a00c
 80482e6:   68 00 00 00 00          push   $0x0
 80482eb:   e9 e0 ff ff ff          jmp    80482d0 <_init+0x24>

>>> objdump -R a.out
0804a00c R_386_JUMP_SLOT   printf@GLIBC_2.0

用gdb-peda查看main函数中反汇编结果

call   0x80482e0 <printf@plt>

对反汇编printf的plf表值

gdb-peda$ pdisass 0x80482e0

   0x080482e0 <printf@plt+0>:   jmp    DWORD PTR ds:0x804a00c
   0x080482e6 <printf@plt+6>:   push   0x0
   0x080482eb <printf@plt+11>:  jmp    0x80482d0

上面的0x804a00c为printf的got表值

gdb-peda$ xinfo 0x804a00c
0x804a00c --> 0x80482e6 (<printf@plt+6>:    push   0x0)

当我们执行完一次printf后
gdb-peda$ xinfo 0x804a00c
0x804a00c --> 0xb7e52670 (<__printf>:   call   0xb7f28b09 <__x86.get_pc_thunk.ax>)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值