能力值:
( LV2,RANK:10 )
|
-
-
2 楼
0x000000000001D054这个地址是lib0opsPass.so的基地址为 0的时候的值。你要下断点的地址是 lib0opsPass.so基地址+0x000000000001D054,先用gdb看看lib0opsPass.so的基地址吧
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
以下断点在 libc.so 中的 printf 为例找到 libc.so 在你程序中的加载基址用gdb载入程序并运行到入口点,用 libs 命令可以找到所有加载的 so 的信息,如下所示:
pwndbg> libs
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
0x400000 0x401000 r--p 1000 0 /home/crackwiki/test/test
0x401000 0x402000 r-xp 1000 1000 /home/crackwiki/test/test
0x402000 0x403000 r--p 1000 2000 /home/crackwiki/test/test
0x403000 0x404000 r--p 1000 2000 /home/crackwiki/test/test
0x404000 0x405000 rw-p 1000 3000 /home/crackwiki/test/test
**0x7ffff7deb000** 0x7ffff7e0d000 r--p 22000 0 /usr/lib64/libc-2.29.so
0x7ffff7e0d000 0x7ffff7f5a000 r-xp 14d000 22000 /usr/lib64/libc-2.29.so
0x7ffff7f5a000 0x7ffff7fa6000 r--p 4c000 16f000 /usr/lib64/libc-2.29.so
0x7ffff7fa6000 0x7ffff7fa7000 ---p 1000 1bb000 /usr/lib64/libc-2.29.so
0x7ffff7fa7000 0x7ffff7fab000 r--p 4000 1bb000 /usr/lib64/libc-2.29.so
0x7ffff7fab000 0x7ffff7fad000 rw-p 2000 1bf000 /usr/lib64/libc-2.29.so
0x7ffff7deb000 就是 libc.so 在程序中的加载基址
找到 printf 在 libc.so 中的虚拟地址我使用radare2来反汇编, 如下所示:
[0x00053220]> pd 10 sym.printf
;-- printf:
;-- .annobin_printf.c:
;-- __printf:
/ (fcn) sym._IO_printf 204
| sym._IO_printf (int32_t arg11, int32_t arg10, int32_t arg9, int32_t arg8, int32_t arg7, int32_t arg6, int32_t arg5, int32_t arg1, int32_t arg2, int32_t arg3, int32_t arg4, int32_t arg_e0h);
| bp: 0 (vars 0, args 0)
| sp: 19 (vars 18, args 1)
| rg: 11 (vars 0, args 11)
| 0x00053220 f30f1efa endbr64
| 0x00053224 4881ecd80000. sub rsp, 0xd8
| 0x0005322b 4989fa mov r10, rdi ; arg1
| 0x0005322e 4889742428 mov qword [var_28h], rsi ; arg2
| 0x00053233 4889542430 mov qword [var_30h], rdx ; arg3
| 0x00053238 48894c2438 mov qword [var_38h], rcx ; arg4
| 0x0005323d 4c89442440 mov qword [var_40h], r8 ; arg5
| 0x00053242 4c894c2448 mov qword [var_48h], r9 ; arg6
| 0x00053247 84c0 test al, al
| ,=< 0x00053249 7437 je 0x53282
printf 函数在libc.so中的虚拟地址为: 0x00053220
下断点在 printf断点地址 = 基址 + 虚拟地址 = 0x7ffff7deb000 + 0x00053220 如下所示:
pwndbg> x /10i 0x7ffff7deb000+0x53220
0x7ffff7e3e220 <__printf>: endbr64
0x7ffff7e3e224 <__printf+4>: sub rsp,0xd8
0x7ffff7e3e22b <__printf+11>: mov r10,rdi
0x7ffff7e3e22e <__printf+14>: mov QWORD PTR [rsp+0x28],rsi
0x7ffff7e3e233 <__printf+19>: mov QWORD PTR [rsp+0x30],rdx
0x7ffff7e3e238 <__printf+24>: mov QWORD PTR [rsp+0x38],rcx
0x7ffff7e3e23d <__printf+29>: mov QWORD PTR [rsp+0x40],r8
0x7ffff7e3e242 <__printf+34>: mov QWORD PTR [rsp+0x48],r9
0x7ffff7e3e247 <__printf+39>: test al,al
0x7ffff7e3e249 <__printf+41>: je 0x7ffff7e3e282 <__printf+98>
gdb下断点:b *0x7ffff7e3e220
最后于 2019-8-30 15:34
被采臣·宁编辑
,原因:
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
采臣·宁
# 以下断点在 libc.so 中的 printf 为例
## 找到 libc.so 在你程序中的加载基址
用gdb载入程序并运行到入口点,用 `libs` 命令可以找到所有加载的 so 的信息, ...
感谢前辈指点!
|
|
|