Linux调试

    科技2022-07-10  170

    目录

    GDB调试gdb使用设置汇编语法gdb -tui filename 命令远程调试GDB常见命令断点 查看内存cat /proc/[pid]/[maps]|[smaps]|[status]...cat /proc/meminfo GCC编译GDB调试(临时)关闭地址空间随机化gdb线程调试相关连接 pwngdb调试

    GDB调试

    gdb使用

    设置汇编语法

    set disassembly-flavor intel转换为intel格式的汇编

    set disassembly-flavor att转换为att格式的汇编

    gdb -tui filename 命令

    help layout显示layout指令的帮助内容 layout src显示源代码窗口和命令窗口layout asm显示汇编代码窗口和命令窗口layout split显示源代码窗口、汇编代码窗口及命令窗口layout regs显示寄存器窗口

    远程调试

    进入gdb交互shell之后执行target remote host:port

    host: 远程主机的ip地址或者域名port:远程主机用于调试开放的端口

    GDB常见命令

    s(step into) 步入函数(对应汇编的命令是si)n(next) step over 单步步过(对应汇编的命令是ni)p(print) 打印局部变量或者地址的值i(info) 用于显示各类信息bt(backtrace) 列出被调用的堆栈disas(disassemble) 显示汇编代码。until 执行到指定行。 cmddescriptioni regs(info registers)查看当前寄存器的值i args(info args)查看当前函数参数i locals(info locals)查看当前局部变量i f(info frame)查看栈帧的详细情况i var(info variables)查看程序的变量符号i func(info functions)查看程序中的函数符号

    断点

    b(break) line 在line行下一个断点。 如b 32表示在代码第32行下断点b(break) func 在func函数下断点 如b main在main函数下断点,b(break) line if condition 如果条件成立则在line行断下来。 如:b 10 if var=0表示如果var等于10则在第10行停下来。b(break) *address 在地址address处下断点。 如:b *0x1234表示在地址0x1234下断点d(delete) 删除断点,可以参照b(break)。finish 运行到程序结束,如果后面有断点,则运行至下一个断点。

    查看内存

    在gdb中使用x命令可以查看内存的内容,格式为x/<n/f/u> <address n、f、u是可选参数,address是待查看的内存地址,address具体可以是寄存器,变量,地址

    如: x $ebx + n x 0x1234 x pVar x &var

    参数说明

    n具体参数为一个整数,表示显示内存的长度,也就从address开始向后显示n个内存单元的内容f内存内容的显示格式,具体可以为x(十六进制)、d(十进制)、u(十进制无符号数)、o(八进制)、t(二进制)、a(按十六进制格式显示地址,并显示距离前继符号的偏移量(offset)。常用于定位未知地址(变量)。)、c(字符)、f(浮点数)u表示从地址address向后请求的位宽,如果不指定,gdb默认的位宽为4bytes。具体参数为b(字节)、h(双字)、w(四字)、g(八字),指定位宽之后,gdb从指定的地址按位宽将内存地址的内容读取出来。

    cat /proc/[pid]/[maps]|[smaps]|[status]…

    pid是你要查看的进程ID

    maps 查看pid对应进程的代码段、栈区、堆区、动态库和内核区对应的虚拟地址。

    smaps 通过查看其虚拟内存(堆区)是否不停增长来简单判断进程是否发生了内存溢出。

    state 查看pid对应进程的状态

    status 查看pid对应进程的状态信息

    fd pid对应进程的相关的所有文件描述符

    cat /proc/meminfo

    查看整机内存使用情况。

    GCC编译

    gcc -D _DEBUG 使#ifdef _DEBUG生效

    GDB调试(临时)关闭地址空间随机化

    关闭ASLR:set disable-randomization on开启ASLR:set disable-randomization off查看ASLR状态:show disable-randomization

    gdb线程调试

    pass

    相关连接

    https://sites.google.com/site/linux31family/home/home-1/–8/gccgdb/gccgdb-4

    pwngdb调试

    可以用命令以结构体的形式查看内存

    Processed: 0.015, SQL: 8