IDA 远程调试 gdbserver 完整实战教程(适合 Android / Linux 逆向)
一、什么是 IDA 远程调试(gdbserver)
IDA 远程调试指的是:
- IDA 运行在你的电脑上(调试端 / Client)
- 程序运行在另一台设备(被调试端 / Server)
- 双方通过 gdbserver + TCP 通信
典型结构如下:
[IDA Pro] <==== TCP ====> [gdbserver + 目标程序]
PC Linux / Android
为什么要用 gdbserver?
- Android 没法直接跑 IDA
- ARM / MIPS / 嵌入式
- 真机行为 ≠ 模拟器
- 反调试只在真机触发
👉 gdbserver 是远程调试的核心桥梁。
二、准备环境
1️⃣ 调试端(你的电脑)
- Linux / Windows
- IDA Pro(建议 7.x 以上)
- 对应架构的交叉调试支持(IDA 自带)
2️⃣ 被调试端(目标设备)
- Linux / Android
- CPU 架构需匹配(x86 / arm / arm64)
gdbserver可执行文件
三、优先使用 IDA 自带的远程调试服务器(dbgsrv,强烈推荐)
这是很多人会忽略、但非常关键的一点:
IDA Pro 安装目录本身就自带了完整的远程调试服务器(dbgsrv),大多数情况下无需额外下载 gdbserver / android_server。
1️⃣ IDA 自带 dbgsrv 在哪里?
在 IDA 可执行文件(ida / ida64 / ida.exe / ida64.exe)同级目录 下,你会看到:
dbgsrv/
这个目录里已经包含了 常见系统 + 常见架构的远程调试服务端程序 ,基本是一个"全家桶"。

2️⃣ dbgsrv 目录常见内容说明
Android
android_server (ARM32)
android_server32 (ARM32,旧命名)
android_x64_server (ARM64)
android_x86_server (x86)
Linux
linux_server (x86_64)
linux_server32 (x86 32-bit)
armlinux_server (ARM64)
armlinux_server32 (ARM32)
armlinux_serverhf32 (ARM32 hard-float)
macOS
mac_server
mac_server_arm
mac_server_arme
Windows
win32_remote32.exe
win64_remote.exe
👉 结论:IDA 自带的 dbgsrv 已经覆盖了 99% 的使用场景,优先使用即可。
3️⃣ 什么时候才需要另外下载 / 编译 gdbserver?
一般 不需要,只有在以下情况才考虑:
- 📌 目标系统非常老(如 Android 4.x、老内核 Linux)
- 📌 libc / linker 与 IDA 自带 server 不兼容
- 📌 IDA 版本与目标系统差异极大
否则:
优先用 IDA 自带的 dbgsrv,更省事、更稳定、版本更匹配。
4️⃣ 新手快速判断:该用哪个 server?
(1)先看目标系统
| 目标系统 | 选择 |
|---|---|
| Android | android_* |
| Linux x86 | linux_server / linux_server32 |
| Linux ARM | armlinux_server* |
| macOS | mac_server* |
| Windows | win*_remote*.exe |
(2)再看 CPU 架构(非常关键)
bash
uname -m
| uname -m | 选择 |
|---|---|
| armv7l | android_server / armlinux_server32 |
| aarch64 | android_x64_server / armlinux_server |
| x86_64 | linux_server / android_x64_server |
| i686 / i386 | *_server32 |
(3)确认 32 位 / 64 位程序
bash
file target_binary
ELF 32-bit→ 使用*_server32ELF 64-bit→ 使用默认 / x64 server
5️⃣ 实战建议(博客推荐总结)
实战经验
- 先使用 IDA 安装目录自带的
dbgsrv- 架构不对再考虑自行下载或编译 gdbserver
- 不要一上来就去 GitHub 乱找 gdbserver
四、获取 gdbserver(仅在特殊情况下需要)
Linux
bash
sudo apt install gdbserver
确认:
bash
which gdbserver
gdbserver --version
Android
常见来源:
- Android NDK
- Magisk 模块
- 手机上的
/system/bin/gdbserver
查看架构:
bash
uname -m
⚠️ 必须和目标程序架构一致,否则直接连不上。
四、启动 gdbserver(被调试端)
方法一:调试已存在进程(最常用)
bash
gdbserver :23946 --attach <pid>
查看 pid:
bash
ps -ef | grep target
方法二:启动程序并调试
bash
gdbserver :23946 ./target_program
参数说明
:23946:监听端口(可自定义)--attach:附加到已运行进程
成功后你会看到:
Listening on port 23946
说明 gdbserver 已就绪。
五、IDA 端设置远程调试
1️⃣ 打开程序
在 IDA 中打开 与你目标设备一致的 ELF 文件(本地副本即可)
⚠️ 架构必须一致(ARM/ARM64/x86)
2️⃣ 选择调试器
菜单:
Debugger → Select debugger
选择根据你自己的实际情况选择,我要调试的是arm linux要选:
- Remote ARM Linux/Android debugger

3️⃣ 设置远程参数
菜单:
Debugger → Process options

⚠️ 信息必须一致正确,否则会失败,如果失败多数问题出现在这里
填写(不填写的可以留空,有需要可以查阅文档):
- Application:/home/jet/demo(就是执行程序的完整路径,我这里的程序是demo)
- Input file:留空(如果有问题自行查阅文档)
- Directory:/home/jet(程序目录)
- Hostname:192.168.1.100 (目标设备 IP,可以先ping 192.168.1.100如果不通,你要先解决设备通电脑网络通信问题,才能调试)
- Port:23946(启动 gdbserver时指定的就是端口号保持一致)
- 然后点击OK
示例:
Hostname: 192.168.1.100
Port: 23946
六、开始调试(三选一启动调试)

可以点击绿色三角形按钮开始调试了
或
点击:
Debugger → Attach to process
或
Debugger → Start process
成功后你会看到:
- 寄存器窗口刷新
- 程序暂停在当前指令
- 状态栏显示
Running / Suspended
🎉 远程调试已建立!
七、常见调试操作
下断点
- F2:下断点
- 右键 → Add breakpoint
单步
- F7:Step into
- F8:Step over
F9:Start process
查看寄存器或者内存查看打开等
Debugger → Quick debug view → Registers

八、如何确认要用什么平台的 gdbserver(重点总结)
这是最容易出错、也最重要的一步,80% 的远程调试失败都出在这里。
一句话结论:
gdbserver 跑在"目标设备"上,并且必须与"目标程序的系统 + CPU 架构 + 位数"完全一致。
1️⃣ 先确认程序运行的平台
| 目标环境 | 必须使用的 gdbserver |
|---|---|
| Ubuntu / Debian / CentOS | Linux gdbserver |
| Android 真机 / 模拟器 | Android gdbserver |
| 路由器 / 嵌入式 | 对应架构的 Linux gdbserver |
⚠️ Android ≠ 普通 Linux,不能混用。
2️⃣ 确认目标设备 CPU 架构
在目标设备上执行:
bash
uname -m
常见结果对照:
| uname -m | 架构 | gdbserver |
|---|---|---|
| x86_64 | x64 | gdbserver x86_64 |
| i686 / i386 | x86 | gdbserver x86 |
| armv7l | ARM32 | gdbserver arm |
| aarch64 | ARM64 | gdbserver arm64 |
3️⃣ 再确认目标程序本身的架构(非常关键)
即使系统是 64 位,程序也可能是 32 位。
bash
file target_program
示例输出:
text
ELF 32-bit LSB executable, ARM
✅ 正确选择:ARM32 gdbserver
❌ 错误选择:ARM64 gdbserver
4️⃣ Android 场景下的判断方法
查看设备支持的 ABI
bash
adb shell getprop ro.product.cpu.abi
查看 APK 内 so 架构
bash
unzip app.apk | grep lib/
常见对应关系:
| so 目录 | 架构 | gdbserver |
|---|---|---|
| armeabi-v7a | ARM32 | Android gdbserver arm |
| arm64-v8a | ARM64 | Android gdbserver arm64 |
| x86 | x86 | Android gdbserver x86 |
| x86_64 | x64 | Android gdbserver x86_64 |
👉 调哪个 so,就用哪个架构的 gdbserver。