热门标签 | 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就验证一下,看看效果……



推荐阅读
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • FIN7后门工具伪装成白帽工具进行传播
    fin7,后门,工具,伪装,成,白, ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
  • golang源码分析调度概述
    golang源码分析-调度过程概述本文主要概述一下golang的调度器的大概工作的流程,众所周知golang是基于用户态的协程的调度来完成多任务的执行。在Linux ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • linux创建文件软连接和硬链接详解
    前言 ... [详细]
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社区 版权所有