我正在64位linux上编写一些ROP shellcode。我发现我的小工具都使用了' objdump -d /lib64/libc.so.6'和' ROPgadget /lib64/libc.so.6'
这只是意味着我从libc的基础中选择了包含我希望执行的汇编指令的偏移量。
使用来自objdump的值作为/ proc / $ pid / maps [1]中找到的libc基址的偏移量,我制作了我的有效负载。但是,当使用gdb单步执行代码时,使用objdump和ROPgadget找到的一些小工具不会出现。
为什么看起来某些libc代码丢失了?我使用了错误的基地址吗?
[1]
7ffff7818000-7ffff79b5000 r-xp 00000000 08:03 5317651 /lib64/libc-2.19.so
7ffff79b5000-7ffff7bb4000 ---p 0019d000 08:03 5317651 /lib64/libc-2.19.so
7ffff7bb4000-7ffff7bb8000 r--p 0019c000 08:03 5317651 /lib64/libc-2.19.so
7ffff7bb8000-7ffff7bba000 rw-p 001a0000 08:03 5317651 /lib64/libc-2.19.so
P.S。
lrwxrwxrwx 1 root root 12 Dec 11 15:42 /lib64/libc.so.6 -> libc-2.19.so
并禁用ASLR
缺少的小工具:
$ objdump -M intel -D /lib64/libc-2.19.so | grep -B1 ret | grep rsp | grep pop
63fd: 5c pop rsp
6a98: 5c pop rsp
只是为了证明我可以做数学: 0x7ffff7818000 + 6a98 = 0x7ffff781ea98
(gdb) disas 0x7ffff781ea98
No function contains specified address.