我尝试在堆内存中搜索ascii,使用
cat /proc/PID/maps | grep heap
然后我想用GDB搜索ascii
find 0x1577000,0x2a01000,"/bin/sh"
但我得到了错误:
gdbserver: Unable to access target memory at 0x1579e9b, halting search.
我能做些什么?
cotxawn71#
但我得到了错误:1.您 * 可能 * 在不同的进程上使用了grep和(gdb) find。堆位置由ASLR随机化(尽管GDB禁用ASLR)1.在GLIBC中,malloc倾向于使用mmap ed arenas,在/proc/$pid/maps中,它们 * not * 标记为heap,所以无论如何,您很有可能找不到要查找的字符串。
grep
(gdb) find
malloc
mmap
/proc/$pid/maps
heap
im9ewurl2#
查找0x 1577000、0x 2a 01000 "、/bin/sh”GDB的命令find将搜索一个“包含范围”,但是如果0x 2a 01000是/proc/pid/maps中一个内存区域的上限,这意味着该区域向上到但不包括那个位置,所以从那个位置减去1,然后给予GDB这个命令
/proc/pid/maps
find 0x1577000,0x2a00fff,"/bin/sh"
2条答案
按热度按时间cotxawn71#
但我得到了错误:
1.您 * 可能 * 在不同的进程上使用了
grep
和(gdb) find
。堆位置由ASLR随机化(尽管GDB禁用ASLR)1.在GLIBC中,
malloc
倾向于使用mmap
ed arenas,在/proc/$pid/maps
中,它们 * not * 标记为heap
,所以无论如何,您很有可能找不到要查找的字符串。im9ewurl2#
查找0x 1577000、0x 2a 01000 "、/bin/sh”
GDB的命令find将搜索一个“包含范围”,但是如果0x 2a 01000是
/proc/pid/maps
中一个内存区域的上限,这意味着该区域向上到但不包括那个位置,所以从那个位置减去1,然后给予GDB这个命令