热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android内核编译调试信息,Android内核编译调试

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?Author:GeneBlue禁止任何形式转载0X01前言研究

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

Author: GeneBlue

禁止任何形式转载

0X01 前言

研究Android底层或漏洞方面的知识,编译调试内核源码是必不可少的。这篇文章介绍内核编译调试的基本步骤。

0X02 环境Android开发环境:SDK,NDK

PC OS:Ubuntu 14.04 LTS 64bit

Kernel Source:goldfish3.4

Android Source: android-4.4.4_r1

0X03 配置

设置环境变量,指定交叉编译器到path路径,指定编译时使用的配置文件,保存为脚本方便执行:export PATH=$YOUR_ANDROID_SRC_PATH/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/:$PATH

export ARCH=arm

export SUBARCH=arm

export CROSS_COMPILE=arm-eabi-

make goldfish_armv7_defconfig

通过git将内核源码回溯到补丁之前的版本。增加内核config选项,默认的goldfish_armv7_defconfig配置没有打开调试,也没有使用HIGHMEM,手动打开 goldfish/.config 文件,设置以下配置:CONFIG_HIGHMEM=y

CONFIG_DEBUG_KERNEL=y

CONFIG_KGDB=y

CONFIG_DEBUG_INFO=y

CONFIG_KGDB_SERIAL_CONSOLE=y

关闭CONFIG_DEBUG_RODATA选项

0X04 编译

编译一开始会有提示让选择配置选项,相关的配置全部选Y, 编译完成后内核在goldfish/arch/arm/boot/zImage 处make ARCH=arm CROSS_COMPILE=/home/geneblue/Android/Source/android-4.4.4_r1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi- all

0X05 内核调试

内核镜像编译成功后,可以在Android emulator中创建AVD并加载内核镜像。

首先,需要建立一个用于调试内核的AVD:

注意勾选“Use Host GPU”,该选项可以显著加快模拟器的启动速度。

启动模拟器,检查新建的模拟器是否能正常启动:emulator -list-avds

emulator -avd Debug_Kernel -gpu mesa

启动完毕后,可以在模拟器中查看Android Kernel version:

在此基础上指定编译好的内核镜像来启动模拟器:emulator -kernel ./goldfish/arch/arm/boot/zImage -avd Debug_Kernel -gpu mesa

调试内核,需要在其启动的一开始就暂停下来,等待调试器的连接,使用如下命令:emulator -verbose -netfast -show-kernel -kernel ./arch/arm/boot/zImage -avd Debug_Kernel -gpu mesa -qemu -s -S

-verbose -show-kernel选项可以看到内核的详细输出,-no-window -no-audio选项可以不启动界面,-qumu -s -S选项可以启动调试监听让内核启动时在端口1234等待。

模拟器停止,等待gdb连接:arm-linux-androideabi-gdb vmlinux

target remote :1234

前述配置config选项时设置CONFIG_DEBUG_INFO=y,所以vmlinux中包含了内核符号信息,在gdb中可以做到源码级调试:

至此,已经能够调试内核源码

0X06 内核漏洞调试

在能够调试内核源码的基础上,内核漏洞的调试则要求更多的调试技巧。拿到一个内核漏洞时,首先定位该漏洞发生的源码位置,熟悉该部分代码的功能和简单使用;如果有POC就验证一下,看看效果……



推荐阅读
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了程序员最美的情人节礼物,即使用JS渲染的3D玫瑰,通过在QQ空间和人人网上分享这个特殊的礼物,可以给情人带来惊喜和喜悦。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
author-avatar
G眯眼猫2850927647Ona
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有