少部分包含gdb-peda的特性。。
1. 调试的快捷键
peda带有的功能,直接输入命令,其就会给予提示(如果不是这样,基本上也是该命令就可以不带参数)。这儿就不多做介绍
1.1 基础的调试快捷键
s
step,si步入n
执行下一条指令 ni步入b
在某处下断点,可以用b * adrress
b function_name
info b
查看断点信息delete 1
删除第一个断点
c
继续r
执行disas addr
查看addr处前后的反汇编代码
1.2 显示数据
p
系列p system/main
显示某个函数地址p $esp
显示寄存器
p/x p/a p/b p/s
。。。p 0xff - 0xea
计算器print &VarName
查看变量地址p * 0xffffebac
查看某个地址处的值
x
系列x/xw addr
显示某个地址处开始的16进制内容,如果有符号表会加载符号表x/x $esp
查看esp寄存器中的值x/s addr
查看addr处的字符串x/b addr
查看addr处的字符x/i addr
查看addr处的反汇编结果x/ngx addr
显示某个地址处开始的十六进制内容,以八字节位单位显示n个
info
系列info register $ebp
查看寄存器ebp中的内容 (简写为 i r ebp)i r eflags
查看状态寄存器i r ss
查看段寄存器i b
查看断点信息i functions
查看所有的函数
disas addr
查看addr处前后的反汇编代码stack 20
查看栈内20个值show args
查看参数vmmap
查看映射状况 peda带有readelf
查看elf文件中各个段的起始地址 peda带有parseheap
显示堆状况 peda带有
1.3 查找数据
find
查找字符串 peda带有searchmem
查找字符串 peda带有
1.4 修改数据
set $esp=0x110
修改寄存器的值set *0xf7ff3234=0x08042334
修改内存的值set args "asdasg" "afdasgasg" "agasdsa"
分别给参数1,2,3赋值- set args “
python -c 'print "1234\x7f\xde"'
“ 这个参数中用python脚本重写了一下,避免有些字符无法正确设置 r "arg1" "arg2" "arg3"
设置参数
2. 查找某个plt、got、plt_2
- plt 可以直接使用pwntools中的ELF(elf).symbols(function_name)
- got 可以直接使用pwntools中的ELF(elf).got(function_name)
- plt_2 可以直接使用pwntools中的ELF(lib).symbols(function_name)
3. 查找程序所动态链接的库
file pwn3
- pwn3: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=916959406d0c545f6971223c8e06bff1ed9ae74d, not stripped
checksec pwn3
- [*] ‘/root/Desktop/Pwnable/fmt/normal/fmt_string_write_got/pwn3’
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
- [*] ‘/root/Desktop/Pwnable/fmt/normal/fmt_string_write_got/pwn3’
ldd pwn3
- linux-gate.so.1 (0xf77ad000)
libc.so.6 => /lib32/libc.so.6 (0xf75d2000)
/lib/ld-linux.so.2 (0x56601000)
- linux-gate.so.1 (0xf77ad000)
4.堆操作
tracemalloc on
跟踪每次mallocparseheap
把堆的布局输出heapinfo
展示heap的信息
5.开启和关闭ALSR
ASLR 的等级可以通过一个内核参数 randomize_va_space 来进行控制,查看其值即可知道当前系统的 ASLR 的等级,如下:
- 0:关闭ASLR
1 | sudo bash -c "echo 0 > /proc/sys/kernel/randomize_va_space" |
- 1:保留的ASLR
1 | sudo bash -c "echo 1 > /proc/sys/kernel/randomize_va_space" |
- 2:完全的ASLR
1 | sudo bash -c "echo 2 > /proc/sys/kernel/randomize_va_space" |