当前位置: 首页 > news >正文

2025 - GDB 盲调笔记--调试 “无调试符号“ “无调试信息“ 的三方程序

环境: arm64-ubuntu

相关:strace、ltrace、readelf、patchelf、string、ldd  -v

1). 使用 gdb 启动目标程序

DIR_APP=/opt/test
gdb --args env LANGUAGE= LD_LIBRARY_PATH=${DIR_APP}:${DIR_APP}/addons/cef:${DIR_APP}/old-libs  ${DIR_APP}/main

2). gdb 指令

gdb载入目标程序后会自动暂停程序的运行,要继续运行程序得敲:
r                                        # run
q                                       # quit, 退出 gdb,停止调试

但在运行之前,可能需要先静态分析下,好设置断点,设置断点的gdb指令:
b     *0x7ff43b8254           # 在指定地址下断, breakpoint
b      uv_fs_mkdir              # 如果有函数名这种明确的调试符号,可以直接在函数入口处下断,即设置断点
b      __libc_start_main

断点被触发后,gdb会暂停程序,此时如要继续运行,得敲入:
c        # 或者其它的继续运行指令, 如单步运行 si、ni,运行到函数结束 finish



反汇编指定地址的代码:
x           /20i 0x0000007ff43b3a90      # examine,用于解析指定内存地址的数据,可通过选项来决定是解析为汇编指令还是指定格式的数据
display /20i $pc
disp      /20i $pc

暂停时自动反汇编的开关打开:
set disassemble-next-line auto


显示当前的函数调用栈:
bt
bt full


显示指定地址的内存:
dump binary memory ./test.so 0x0000007ff4360000 0x0000007ff43e3288
x    /20x    0x0000007ff4360000
p (char*)0x7fffffcdb9


显示寄存器值
i        registers
p      $pc
print $pc


显示各个库都被加载到内存哪个地方(可用于在静态分析工具,如ida中设置段基址:  edit -> segment -> rebase):
info proc mappings        # 这个才是准确的, info sharelibrary(i  sh) 显示的是可执行区的内存起始地址



单步跟踪:
si  会进函数(有调试符号可以不用加i)
ni  不进函数
 

执行到当前函数结束处
finish
 

相关文章:

  • MyBatis-Plus分页控件使用及使用过程发现的一个坑
  • 从0开始的操作系统手搓教程31:完成硬盘驱动程序
  • 恋爱循环2025年3月9日
  • 基于RNN+微信小程序+Flask的古诗词生成应用
  • C语言学习day25:WinAPI编程进阶07-游戏辅助时钟周期事件、定时器消息
  • 带宽计算公式
  • clickhouse源码分析
  • 顺序栈和链式栈的使用
  • 内存管理——页表、页表项、页目录、多级页表
  • 【大模型知识点】位置编码——绝对位置编码,相对位置编码,旋转位置编码RoPE
  • 【CXX】6.2 Rust::Str 公共 API
  • MySQL中的`JSON_EXTRACT`函数
  • Anthropic 平台升级,解锁 Claude3.7Sonnet 与 prompt 创作新玩法
  • SPI驱动(六) -- SPI_OLED上机实验(使用spidev)
  • 梯度计算中常用的矩阵微积分公式
  • 计算机网络----主要内容简介
  • Qwen2.5-7B-Instruct进行自我认知微调
  • HTTP 黑科技
  • 为什么会有结构体?
  • 《几何原本》命题I.25
  • 网站换域名seo怎么做/代刷网站推广免费
  • 制作图网官网/搜索引擎优化是什么意思
  • 恩施州建设局网站/上海短视频seo优化网站
  • 中小型网站建设代理商/百度首页纯净版怎么设置
  • 怎么把淘宝店放到自己做的网站去/seoul是什么国家
  • 汉化主题做网站效果图/广州疫情最新情况