0%

使用GDB、LLDB调试安卓程序

命令对照表

GDB to LLDB command map

环境

PC: Windows 10
NDK: 22.1.7171670

程序位置

GDB 8.3(位于<ndk>\toolchains\llvm\prebuilt\windows-x86_64\bin
lldb version 11.0.5(位于<ndk>\prebuilt\windows-x86_64\bin

注意:如果找不到NDK内置的对应server,则在Android Studio中下载旧版本。

Server

ARM

<ndk>\prebuilt\android-arm64\gdbserver
<ndk>\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\11.0.5\lib\linux\arm\lldb-server

ARM64

<ndk>\prebuilt\android-arm\gdbserver
<ndk>\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\11.0.5\lib\linux\aarch64\lldb-server

Spawn模式

gdb

启动server

1
2
adb forward tcp:9999 tcp:9999
adb shell su -c "/data/local/tmp/gdbserver :9999 /data/local/tmp/victim"

PC连接

进入gdb命令行,执行以下命令连接:

1
target remote :9999

调试器自动断在__dl__start () from target:/system/bin/linker

lldb

server

1
2
adb forward tcp:1234 tcp:1234
adb shell su -c "/data/local/tmp/lldb-server platform --listen '*:1234' --server &"

连接

进入lldb命令行,执行以下命令连接:

1
2
platform select remote-android
platform connect connect://:1234

启动

设置工作目录,指定文件后执行:

1
2
3
platform settings -w /data/local/tmp
file victim
run

Attach模式

可使用pidof获取进程pid

gdb

server

1
2
adb forward tcp:9999 tcp:9999
adb shell su -c "/data/local/tmp/gdbserver :9999 --attach $(pidof victim)"

PC连接

进入gdb命令行,执行以下命令连接:

1
target remote :9999

lldb

server

转发端口,并以后台模式启动:

1
2
adb forward tcp:1234 tcp:1234
adb shell su -c "/data/local/tmp/lldb-server platform --listen '*:1234' --server &"

连接

进入lldb命令行,执行以下命令连接:

1
2
platform select remote-android
platform connect connect://:1234

附加

可使用进程名或pid附加

1
2
attach -name victim
attach -p 18600

参考

Remote Debugging — The LLDB Debugger