libc_base & ld_base lower 12 bits
우리는 익스 코드를 짜면서 디버깅용으로 libc_base 주소를 출력시키고는 한다.
이때 소소한 꿀팁은 remote로 실행할때도 출력시킬때
출력되는 값이
C
stdout = 0x7f9dc6048620
libc_base = 0x7f9dc5c83000
ld_base = 0x7f9dc6272000다음과 같이 base는 아래 12비트가 0인것을 주의해야 한다. 이를 통해 서버에서도 내 코드가 잘 작동하고 있는 건지 디버깅을 할 수 있다.
C
pwndbg> vmmap
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
0x555555400000 0x555555401000 r-xp 1000 0 /home/rtld/rtld
0x555555601000 0x555555602000 r--p 1000 1000 /home/rtld/rtld
0x555555602000 0x555555603000 rw-p 1000 2000 /home/rtld/rtld
0x7ffff7a0d000 0x7ffff7bcd000 r-xp 1c0000 0 /lib/x86_64-linux-gnu/libc-2.23.so
0x7ffff7bcd000 0x7ffff7dcd000 ---p 200000 1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
0x7ffff7dcd000 0x7ffff7dd1000 r--p 4000 1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
0x7ffff7dd1000 0x7ffff7dd3000 rw-p 2000 1c4000 /lib/x86_64-linux-gnu/libc-2.23.so
0x7ffff7dd3000 0x7ffff7dd7000 rw-p 4000 0
0x7ffff7dd7000 0x7ffff7dfd000 r-xp 26000 0 /lib/x86_64-linux-gnu/ld-2.23.so
0x7ffff7fed000 0x7ffff7ff0000 rw-p 3000 0
0x7ffff7ff6000 0x7ffff7ffa000 r--p 4000 0 [vvar]
0x7ffff7ffa000 0x7ffff7ffc000 r-xp 2000 0 [vdso]
0x7ffff7ffc000 0x7ffff7ffd000 r--p 1000 25000 /lib/x86_64-linux-gnu/ld-2.23.so
0x7ffff7ffd000 0x7ffff7ffe000 rw-p 1000 26000 /lib/x86_64-linux-gnu/ld-2.23.so
0x7ffff7ffe000 0x7ffff7fff000 rw-p 1000 0
0x7ffffffde000 0x7ffffffff000 rw-p 21000 0 [stack]
0xffffffffff600000 0xffffffffff601000 --xp 1000 0 [vsyscall]다음과 같이 핵심 base들은 모두 000 이다.