从官网下载最新的gdb代码
这才是正宗的, 那些git, googlesource, 镜像,甚至什么补丁,脚本等全见去吧。
这么简单的事为什么搞那么复杂呢?装xx? 历史?
tar -xzvf gdb-7.11.tar.gz , 这才是正宗代码,包含gdb和gdbserver
1. 编译gdb
cd gdb-7.11
./configure --target=arm-linux-androideabi --prefix=/usr/local/gdb/gdb-7.11/arm-linux
make
make install
2.交叉编译gdbserver
cd gdb-7.11/gdb/gdbsever
./configure --target=arm-linux-androideabi --host=arm-linux-androideabi --prefix=/usr/local/gdbserver/gdb-7.11/arm-linux
make
make install
gdbserver 编译遇到两个错误,一个是找不到stdio_ext.h, 简单注释掉该行。
还有一个是函数冲突, 说某c文件的函数定义与一个头文件中的定义冲突。
但是我看了c 中定义的是static, 按说不算冲突。 先简单把头文件中的注释掉,编译通过。
惴惴之心,就看能否运行了。
用idagdbserver 调试应用程序
gdbserver 与 ida-pro 配合调试, 一定不要用gdbserver 直接加载应用, 而应该空启动gdbserver,举例如下:
gdbserver --multi 192.168.150.1:23946
然后用ida 远程调试应用。run->application 填入远程文件路径,
ida 会对文件分析和应用签名及type,这样连接上可以看到ida 分析后的文件,
否则就是两一抹黑。gdbserver
第二个好处, 调试完成后可以第二次加载应用。gdbserver 不用重启gdb.
为了保留第一次的分析结果,你应该take a snapshot, 选择loader segment 即可, 然后
就可以很方便的,快速的重新启动程序。
而用gdb加载,, 调试完成后,gdb 虽然重启了,但它却没有重启应用。所以,调试完后还要杀掉gdb,重新启动gdb加载
可惜保存就有些问题,因为是4G虚拟空间,现在要做实,所以不用保存,可以只提取里面手工添加过的符号信息等。
用idagdbserver 调试so 程序。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-40589-1.html
想在南海找回
何来公信力
驸马都尉是武汉大学中文出身的文科生