我想从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]
...
我计算了偏移内存,但没有运行。这需要什么技术?
答案 0 :(得分:0)
我想从libc.so.6基地址获取testlib.so的地址。(因为ASLR)
testlib.so
的基地址 nothing 与libc.so.6
的基地址有关,前者无法从后者计算。
我计算了偏移内存,但没有运行。
这句话没有任何意义。
要获得更好的答案,请尝试解释您实际尝试实现的目标,执行的计算,预期结果以及您观察到的结果。