分享一个有意思的gdb插件

简介: 分享一个有意思的gdb插件

最近在一个技术分享上听说了一个有意思的gdb插件:peta(https://github.com/longld/peda),使用它可方便地对C/C++代码进行逆向工程

9353fbe04efed58d71e8972d75207b5d.png


peda的输出分为三个框,一个显示寄存器状态,一个显示当前汇编指令,一个显示stack状态


安装方法很简单,


git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
echo "DONE! debug your program with gdb and enjoy"


接下来写个小程序试用下:


#include <iostream>
int main() 
{
 int i = 10;
 i = i++;
 std::cout << i << std::endl;
 return 0;
}


执行i = i++之后,i的值是多少呢?是10还是11?根据语言标准这其实是未定义行为,也就是返回什么值,主要取决于具体的编译器实现。接下来我们在X86 GCC编译看看结果如何?


g++ -g -O0 1.cpp
./a.out
10


可以看到i的结果为10。为什么会这样呢?我们逆向二进制a.out一探究竟


gdb ./a.out

f9b0215fb45381dd522ab7d3e9795ac4.png


核心代码如下,i从内存load到寄存器之后,先执行自增,然后先将自增结果11 save到内存,再将i++返回值10 save到内存,结果值11被10覆盖,最终i的值为10。


0x00000000004007ea <+8>:    mov    DWORD PTR [rbp-0x4],0xa   ; i = 10
   0x00000000004007f1 <+15>:  mov    eax,DWORD PTR [rbp-0x4]   ; eax = i(10)
=> 0x00000000004007f4 <+18>:  lea    edx,[rax+0x1]             ; edx = 11
   0x00000000004007f7 <+21>:  mov    DWORD PTR [rbp-0x4],edx   ; i = edx(11)
   0x00000000004007fa <+24>:  mov    DWORD PTR [rbp-0x4],eax   ; i = eax(10)
相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
数据可视化 Ubuntu Linux
研发实用工具,推荐一款代码统计神器GitStats
研发实用工具,推荐一款代码统计神器GitStats
2424 0
研发实用工具,推荐一款代码统计神器GitStats
|
12天前
|
缓存 人工智能 监控
整理了一份 DeepSeek Harness 必备插件清单!
本文是DeepSeek Harness发布半个多月后的插件精选指南,涵盖10款高实用性插件:从生态入口dsh-market、视觉增强modlens,到界面升级、代码侧栏、文件引用、桌面端、多源搜索、长期记忆、费用监控及知识精读工具。附安装命令与适用场景,新手三步起步建议,助你高效打造个性化AI工作台。
886 4
整理了一份 DeepSeek Harness 必备插件清单!
|
7月前
|
人工智能 Rust 安全
BitFun:国产首个全开源 ADE工具
BitFun是国产首个全开源Agentic开发环境(MIT协议),基于Rust+TS打造,支持Agentic/Plan/Debug/Review四大智能模式。代码本地运行、全链路可审计,兼顾安全合规与高度可定制,无缝兼容Cursor/Claude配置,为企业与开发者提供透明、可控的AI编程新选择。(239字)
1333 1
|
物联网 Go 网络性能优化
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式【1月更文挑战第21天】【1月更文挑战第104篇】
1227 1
|
机器学习/深度学习 人工智能 自然语言处理
DAPO: 面向开源大语言模型的解耦裁剪与动态采样策略优化系统
DAPO(Decoupled Clip and Dynamic Sampling Policy Optimization)是由字节跳动提出的一种突破性的开源大语言模型强化学习系统。基于Qwen2.5-32B基础模型,DAPO在AIME 2024测试中以50分的优异成绩超越了现有最佳模型,
1761 6
DAPO: 面向开源大语言模型的解耦裁剪与动态采样策略优化系统
|
SQL Web App开发 数据可视化
2025年最热门的TOP5报表工具排行榜
很多数据项目中都会用报表工具来做报表,怎么选一款好用的工具一直是个难题,今天,我们一起盘点5款热门报表软件,看看每款报表工具的特点,看看哪款更适合您。
|
11月前
|
JavaScript 前端开发 Java
基于springboot的高校健身场地预约系统
针对高校健身场地管理效率低、资源分配不均等问题,本文设计并实现了一套基于SpringBoot框架的在线预约系统。系统采用Vue前端与MySQL数据库,实现场地查询、预约、管理等功能,提升学生使用体验与场地利用率,推动校园体育智能化发展。
2022最新最详细必成功的在Vscode中设置背景图、同时解决不受支持的问题
这篇文章提供了在VScode中设置背景图的详细步骤,包括下载background插件、编辑setting.json文件、配置背景样式,并解决了设置后出现的不支持提示的问题。
2022最新最详细必成功的在Vscode中设置背景图、同时解决不受支持的问题
|
机器学习/深度学习 人工智能 缓存
基于AIGC的自动化内容生成与应用
基于AIGC的自动化内容生成与应用
942 3
Cannot open shared library libasound_module_conf_pulse.so
Cannot open shared library libasound_module_conf_pulse.so
1086 0