如何获得基地址的共享库?
问题描述:
我想从libc.so.6的基地址得到testlib.so的地址(因ASLR)如何获得基地址的共享库?
testlib.so
是共享库。
gcc -o ./testlib.so ./testlib.c -fPIC -shared -ldl
我用python代码来查找内存映射状态。这段代码运行时
from ctypes import *
#libc = CDLL('libc.so.6')
libc = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
test = CDLL('./testlib.so')
print libc
print test
,并导致
<CDLL '/lib/x86_64-linux-gnu/libc.so.6', handle 7f17750a09b0 at 7f1774f40210>
<CDLL './testlib.so', handle 15b6ea0 at 7f1774f40550>
内存状态。
Start Addr End Addr Size Offset objfile
0x400000 0x6ea000 0x2ea000 0x0 /usr/bin/python2.7
0x8e9000 0x8eb000 0x2000 0x2e9000 /usr/bin/python2.7
0x8eb000 0x962000 0x77000 0x2eb000 /usr/bin/python2.7
0x962000 0xa6f000 0x10d000 0x0 [heap]
0x7ffff63e1000 0x7ffff6483000 0xa2000 0x0 /home/wwwlk/Downloads/testlib.so
^target address
0x7ffff6483000 0x7ffff6682000 0x1ff000 0xa2000 /home/wwwlk/Downloads/testlib.so
0x7ffff6682000 0x7ffff6683000 0x1000 0xa1000 /home/wwwlk/Downloads/testlib.so
0x7ffff6683000 0x7ffff6684000 0x1000 0xa2000 /home/wwwlk/Downloads/testlib.so
...
0x7ffff77f0000 0x7ffff79b0000 0x1c0000 0x0 /lib/x86_64-linux-gnu/libc-2.23.so
^libc.so.6 address
0x7ffff79b0000 0x7ffff7bb0000 0x200000 0x1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
0x7ffff7bb0000 0x7ffff7bb4000 0x4000 0x1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
0x7ffff7bb4000 0x7ffff7bb6000 0x2000 0x1c4000 /lib/x86_64-linux-gnu/libc-2.23.so
0x7ffff7bb6000 0x7ffff7bba000 0x4000 0x0
...
0x7ffff7ff8000 0x7ffff7ffa000 0x2000 0x0 [vvar]
0x7ffff7ffa000 0x7ffff7ffc000 0x2000 0x0 [vdso]
0x7ffff7ffc000 0x7ffff7ffd000 0x1000 0x25000 /lib/x86_64-linux-gnu/ld-2.23.so
0x7ffff7ffd000 0x7ffff7ffe000 0x1000 0x26000 /lib/x86_64-linux-gnu/ld-2.23.so
0x7ffff7ffe000 0x7ffff7fff000 0x1000 0x0
0x7ffffffde000 0x7ffffffff000 0x21000 0x0 [stack]
...
我计算了偏移量内存,但没有运行。这里需要什么技术?
答
我想从libc.so.6的基址得到testlib.so的地址。(因为ASLR)的
的testlib.so
基址有什么做的基址libc.so.6
,前者不能从后者计算。
我计算了偏移量记忆,但没有运行。
这句话没有任何意义。
为了得到更好的答案,试着解释你实际上想要达到的效果,你进行了什么计算,你期望得到什么结果,以及你观察到了什么。