博文

目前显示的是 八月, 2020的博文

用Ubuntu 20.04编译Linux内核

1. 将Linux源码tar包拷贝到合适的目录,然后用“ tar xvf <文件名> ”解压。 2. 安装编译内核所需依赖。 sudo apt install bison flex libssl-dev libelf-dev 3. 生成内核配置文件,或拷贝一份当前系统所用的配置文件。 由编译内核的目的决定。 如果你想研究Ubuntu的某一个版本的内核,那就拷贝一份该版本所用的内核配置文件到Linux源码根目录下。当前运行的Ubuntu的配置文件在 /boot 文件夹下,以 config 开头,如 /boot/config-5.4.0-26-generic 。将其拷贝到Linux源码根目录下,改名为 .config (注意前面的点)。 或者,也可以用 make menuconfig 来生成一份默认的内核配置文件。 或者,为了研究syzkaller发现的漏洞,可以用syzkaller的内核配置文件。 你也可以在一个内核配置文件的基础上进行微调,比如将“=m”改成“=y”,或“=y”改成“=n”。 本步骤结束时,Linux源码根目录下应该已经存在合适的 .config 文件。 4. 编译 输入“ make -j4 ”开始编译。 j后面的数字不一定越大越好,还是要根据虚拟机的核心数量来决定。 如果编译时依旧出现要选择 y/n ,可以 按Ctrl+C 退出编译,运行“ make olddefconfig ”,这样就能为那些未决定的配置选项生成默认配置。 5. 编译完成 编译完成后,会提示 bzImage 存放在何处。另外,Linux源码根目录下会出现 vmlinux文件,可以用来gdb调试。

NDK中找不到arm-linux-androideabi-gcc的解决办法

最近在研究Android上的Hook和Inject。在研究 这篇文章 的时候,提到了交叉编译,使用了 arm-linux-androideabi-gcc ,但是文章中没有提到这个工具在NDK中的位置。 Google一下,发现大多数页面中提到了 $NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin 这个位置。但是我居然没有在这个位置发现 arm-linux-androideabi-gcc。 所以我们需要亲自重新安装一个工具链。 官方页面 中已经告诉我们该怎么做。主要代码如下: $NDK/build/tools/make_standalone_toolchain.py --arch arm --api 21 --install-dir /tmp/my-android-toolchain 其中 /tmp/my-android-toolchain 目录可以自定义,比如我的是 ~/Downloads/my-android-toolchain 。 $NDK 需要替换成自己的NDK目录。 运行该命令后过一会就会在 /tmp/my-android-toolchain 下生成 bin 目录,其中就有了 arm-linux-androideabi-gcc ,还有在NDK中缺失的 arm-linux-androideabi-clang 、arm- linux-androideabi-clang++ 、 arm-linux-androideabi-g++ 也都有了。