首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
编程技术
发新帖
2
2
[原创]Ghidra反编译器的设计与实现(1)——调试环境搭建
发表于: 2026-3-16 14:21
1602
[原创]Ghidra反编译器的设计与实现(1)——调试环境搭建
zhzhz
2026-3-16 14:21
1602
# Ghidra反编译器的调试环境搭建 反编译器可以将机器码反编译为伪C代码,本文首先介绍Ghidra反编译器的调试环境搭建,下文会基于此调试环境以一个最简单的exe文件为例介绍Ghidra反编译器的设计与实现。 ## Ghidra反编译器的环境搭建 我采用的调试方式是在Ubuntu上编译Ghidra的反编译器,在Windows上用VS Code远程连接到Ubuntu进行调试。 * <a href="elink@80fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6z5j5i4c8A6L8$3&6S2L8q4y4W2j5%4g2J5K9i4c8&6b7h3N6W2L8X3y4&6i4K6u0r3k6$3S2A6k6s2u0S2">下载</a>Ghidra源码 * 进入到源码的Ghidra/Features/Decompiler/src/decompile/cpp目录 * 在该目录创建.vscode目录,并在.vscode目录内创建tasks.json文件和launch.json文件 * tasks.json文件内容: ``` { "version": "2.0.0", "tasks": [ { "label": "make build", "type": "shell", "command": "make decomp_dbg", "args": [], "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] } ``` * launch.json文件内容: ``` { "version": "0.2.0", "configurations": [ { "name": "Debug with Make", "type": "cppdbg", "request": "launch", "program": "./decomp_dbg", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "preLaunchTask": "make build", // 关键:在启动调试前执行make "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] } ``` * 在Ghidra/Features/Decompiler/src/decompile/cpp目录先执行“make”指令,如果报错按照报错内容安装依赖,make成功后在VS Code中按下F5,会首先执行"make decomp_dbg",生成decomp_dbg文件后,会运行该文件。默认情况下生成的decomp_dbg文件是可调试的。 * <a href="elink@9e4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6z5j5i4c8A6L8$3&6S2L8q4y4W2j5%4g2J5K9i4c8&6b7h3N6W2L8X3y4&6i4K6u0r3k6$3S2A6k6s2u0S2i4K6u0r3M7X3g2D9k6h3q4K6k6i4x3`.">下载</a>Ghidra发行版并解压,在/etc/profile最后一行添加环境变量,将上述指令等号“=”后的路径指向自己的Ghidra发行版路径。 ``` export SLEIGHHOME=/root/ghidra_12.0.4_PUBLIC ``` * 成功启动decomp_dbg后在命令行中会显示“[decomp]>”,此时可以输入想要载入分析的文件名,指令如下,注意load和file之间有空格,file和文件路径之间也有空格。 ``` load file /mnt/hgfs/test/1/tt3.exe ``` * 在载入文件后执行 ``` load addr 0x14000300 ``` 如果想要分析反编译器的行为,在执行该指令前可以给对应位置加上断点,然后执行这条指令,这样就可以调试了。0x14000300是exe文件的入口函数地址。tt3.exe是基于最小exe文件思路创建的,在IDA中载入该文件,然后在IDA中修改该文件的汇编代码并保存,这样可以使得将该exe文件载入Ghidra反编译器时可以快速准确的执行到想要分析的汇编指令,而不需要经过很多无关代码。该文件将在下文分析该文件时一并提供,以便读者自行修改分析。 * 快去准备调试环境吧,一切准备就绪,下文我们一起踏上反编译器的原理剖析。
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
#基础知识
#开源分享
收藏
・
2
点赞
・
2
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
wx_晨梦
这个讨论对我很有帮助,谢谢!
2026-7-16 10:46
我的小拇指啊
为你点赞!
2026-3-17 15:49
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
0
)
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
zhzhz
14
发帖
9
回帖
20
RANK
关注
私信
他的文章
[原创]穿越了?研究Linux 2.6内核和驱动?
268
[原创]Windows内核之exe文件section
1334
[原创]Windows内核之载入exe文件
1417
[原创]Windows内核之鼠标处理
1625
[原创]让Qiling框架支持结构化异常(SEH)
9642
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部