温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

自己动手编译android gdbserver 最新版

发布时间:2020-08-02 13:55:04 阅读:4706 作者:sunzeduo 栏目:移动开发
亿速云云数据库,读写分离,安全稳定,弹性扩容,低至0.3元/天!! 点击查看>>

前面转载了一篇 如何编译android gdbserver的博文

原文地址如下:

http://sunzeduo.blog.51cto.com/2758509/1381519

本身这篇文章没有什么问题,按部就班的操作可以生成 gdbserver,但是存在的问题如下:

1  本文编写时间比较早,实用的arm交叉编译版本以及gdb版本都比较老了,arm交叉编译版本是arm-eabi-4.4.3  gdb使用的版本是 7.1.x 。

2 从文章来看是使用下载后android源码中的ndk来编译的,这个可以通过其修改了 $MYDROID/ndk/build/tools/prebuilt-common.sh 这个脚本可以看出来,对于没有下载android源码的童鞋造成障碍。

3  文中的

git clone git://android.git.kernel.org/toolchain/gdb.git
git clone git://android.git.kernel.org/toolchain/build.git

这两个地址早已经无法下载了,又对想自己动手编译android gdbserver的童鞋造成障碍。

4 在中文搜索引擎里面搜索  android gdb调试等,绝大多数均出自      

Android - How-to Rebuild gdbserver  这篇文章的翻译,同样会存在上面的三个问题。

基于以上的问题,笔者自己动手重新简化思路,编译了android gdbserver,降低编译门槛,供更多的童鞋来了解这方面的知识。

一  需要的前置条件

1 下载 Android NDK
直接从 http://developer.android.com/tools/sdk/ndk/index.html
这个地址下载即可,下载下来就是一个压缩包,方便使用。
2 下载 gdb源码
https://github.com/crystax/android-toolchain-gdb
这个下载地址即可

二 添加了两个脚本 (脚本可以从附件下载)

   添加目录 你下载解压缩的目录下的 build/tools  这个目录下

build-gdbserver_7.3.x.sh
prebuilt-common_7.3.x.sh

三 对应规则

root@ubuntu:~/android/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin# ./arm-linux-androideabi-gdb
GNU gdb (GDB) 7.3.1-gg2
root@ubuntu:~/android/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin# ./arm-linux-androideabi-gdb
GNU gdb (GDB) 7.3.1-gg2
arm-linux-androideabi-4.6  GNU gdb (GDB) 7.3.1-gg2
arm-linux-androideabi-4.8  GNU gdb (GDB) 7.3.1-gg2

网上流传的大部分博文,都是gdb 7.1.x的 对应的是 arm交叉编译的 4.4.3

四 编译命令

/root/android/android-ndk-r9c/build/tools/build-gdbserver_7.3.x.sh
/Disk/CyanogenMod/androidgdb/gdb_build/
/root/android/android-ndk-r9c/
arm-linux-androideabi-4.6
--verbose
--build-out=/Disk/CyanogenMod/androidgdb/gdb_build/install
--gdb-version=7.3.x
--sysroot=/root/android/android-ndk-r9c/platforms/android-19/arch-arm

命令解释

 1 /root/android/android-ndk-r9c/build/tools/build-gdbserver_7.3.x.sh

  复制过去的脚本

2 /Disk/CyanogenMod/androidgdb/gdb_build/ 下载的gdb的路径

要以下图的形式组织gdb的目录,否则脚本执行的时候会报错

自己动手编译android gdbserver 最新版

3 /root/android/android-ndk-r9c/  

 下载的ndk解压缩的路径


4 arm-linux-androideabi-4.6 使用ndk中带的arm-linux交叉编译工具,详见ndk根目录下的toolchains目录


5 --verbose  


6 --build-out=/Disk/CyanogenMod/androidgdb/gdb_build/install

 gdbserver生成的目录,如果编译成功了,则在这个目录下生成gdbserver

7 --gdb-version=7.3.x

   要编译的gdb版本,对应你下载的gdb源码包,参考上面的图

8 --sysroot=/root/android/android-ndk-r9c/platforms/android-19/arch-arm

   在编译gdbserver的时候需要用的头文件和库文件

五 编译错误修改

笔者在编译 gdb 7.3.x的时候出现了编译错误,主要是关于elf头文件的问题。

在linux_low.c 中

#ifndef ELFMAG0
/* Don't include <linux/elf.h> here.  If it got included by gdb_proc_service.h
   then ELFMAG0 will have been defined.  If it didn't get included by
   gdb_proc_service.h then including it will likely introduce a duplicate
   definition of elf_fpregset_t.  */
#include <elf.h>
#endif

的后面添加下面的代码

typedef struct {
  uint32_t a_type;
  union {
    uint32_t a_val;
  } a_un;
} Elf32_auxv_t;
typedef struct {
  uint64_t a_type;
  union {
    uint64_t a_val;
  } a_un;
} Elf64_auxv_t;

注意,这个仅仅是7.3.x编译的时候出错的修改方法,当7.1.x或者其他版本的时候可能也会报错,需要找到相应的错误修改即可

六 编译成功

自己动手编译android gdbserver 最新版

自己动手编译android gdbserver 最新版

七  手机测试

将编译好的gdbserver 上传到手机中,赋予可执行的权限,然后运行测试,效果如下图

自己动手编译android gdbserver 最新版

八 附件说明

1 build-gdbserver_7.3.x.sh   和 prebuilt-common_7.3.x.sh需要拷贝到 /root/android/android-ndk-r9c/build/tools/ 这个目录下

2 linux_low.c 需要拷贝到  /Disk/CyanogenMod/androidgdb/gdb_build/gdb/gdb-7.3.x/gdb/gdbserver 这个目录下

附件:http://down.51cto.com/data/2364200

亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×