当前位置: 首页 > news >正文

重庆建设空调网站台州椒江网站建设公司

重庆建设空调网站,台州椒江网站建设公司,H5网站整站,物联网平台排名起因 在摸索到这个方案之后,mac m1调试aarch64 android kernel最终方案,就准备调试内核了,预备下断点的地方是 b binder_poll b ep_ptable_queue_proc b remove_wait_queue但是由于是android系统,上面三个函数会被频繁的触发&am…

起因

在摸索到这个方案之后,mac m1调试aarch64 android kernel最终方案,就准备调试内核了,预备下断点的地方是

b binder_poll
b ep_ptable_queue_proc
b remove_wait_queue

但是由于是android系统,上面三个函数会被频繁的触发,不知道哪次断下的是自己提供的进程触发的,所以准备使用条件断点,只在自己的进程触发下断下。这个条件断点的首要目标是获取aarch kernel的current

观察高版本内核gdb相关代码,目标是获取SP_EL0的值

def get_current_task(cpu):task_ptr_type = task_type.get_type().pointer()if utils.is_target_arch("x86"):var_ptr = gdb.parse_and_eval("&current_task")return per_cpu(var_ptr, cpu).dereference()elif utils.is_target_arch("aarch64"):current_task_addr = gdb.parse_and_eval("$SP_EL0")if((current_task_addr >> 63) != 0):current_task = current_task_addr.cast(task_ptr_type)return current_task.dereference()

困难

狗币google,最新的android emulator使用的qemu版本还是qemu-2.10.0,无法通过gdb获取系统寄存器的值,也就是没办法获取SP_EL0

解决-重编android emulator

重编android kernel

添加CONFIG_GDB_SCRIPTS=y配置,使gdb附加上时,lx-系列命令自动可用

编译android emulator

https://android.googlesource.com/platform/external/qemu/+/emu-master-dev/android/docs/LINUX-DEV.md
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev

下载android emulator并编译

# 1、环境,以及下载源码
sudo apt-get install -y git build-essential python qemu-kvm ninja-build python-pip ccachemkdir $HOME/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > $HOME/bin/repo
chmod 700 $HOME/bin/repo
export PATH=$PATH:$HOME/binmkdir -p emu-master-dev && cd emu-master-dev
repo init -u https://android.googlesource.com/platform/manifest -b emu-master-dev
repo sync -j 8
cd external/qemu# 2、配置ccache# 3、编译
python3 android/build/python/cmake.py --noqtwebengine --noshowprefixforinfo --target linux_aarch64 --ccache auto

这个时候就知道android emulator使用的版本到底有多老了qemu-img -V

修改qemu - gdbstub64

https://stackoverflow.com/questions/46415059/how-to-observe-aarch64-system-registers-in-qemu
https://lists.gnu.org/archive/html/qemu-arm/2020-05/msg00703.html
https://github.com/qemu/qemu/commit/200bf5b7ffe

这里只是做测试,把x1,x2等寄存器替换为了SP_EL0,时间够,以后再改
target/arm/gdbstub64.c


int aarch64_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n)
{ARMCPU *cpu = ARM_CPU(cs);CPUARMState *env = &cpu->env;// 这里进行测试 beginif (n == 1 || n == 2 || n ==3) {return gdb_get_reg64(mem_buf, env->sp_el[0]);}// 这里进行测试 endif (n < 31) {/* Core integer register.  */return gdb_get_reg64(mem_buf, env->xregs[n]);}switch (n) {case 31:return gdb_get_reg64(mem_buf, env->xregs[31]);case 32:return gdb_get_reg64(mem_buf, env->pc);case 33:return gdb_get_reg32(mem_buf, pstate_read(env));}/* Unknown register.  */return 0;
}

修改完毕后,继续重编android emulator

修改android-goldfish-4.4-dev gdb相关脚本

goldfish/scripts/gdb/linux/cpus.py

task_type = utils.CachedType("struct task_struct")class LxCurrentFunc(gdb.Function):"""Return current task.$lx_current([CPU]): Return the per-cpu task variable for the given CPU
number. If CPU is omitted, the CPU of the current context is used."""def __init__(self):super(LxCurrentFunc, self).__init__("lx_current")def invoke(self, cpu=-1):task_ptr_type = task_type.get_type().pointer()# 我在gdbstub64.c中将x1替换为了SP_EL0# 后期再改,这里只实验是能获取currentcurrent_task_addr = gdb.parse_and_eval("$x1")gdb.write(str(hex(current_task_addr)))if((current_task_addr >> 63) != 0):current_task = current_task_addr.cast(task_ptr_type)return current_task.dereference()

使用

下一个断点,在自己的进程运行起来之后断下,目的:通过lx-ps查看该进程的pid

pwndbg> lx-ps
0xffffffc02a8f7000 2343 AsyncTask #1
0xffffffc02a8f3800 2345 ExecutorUtils
0xffffffc02d4dd400 2367 android_tese  <<<<<<<<<<< 

下断点,测试
我在gdbstub64.c中将x1替换为了SP_EL0,后期再改,这里只实验是能获取current

b binder_poll if ((struct task_struct)(*$x1)).pid == 2367
b ep_ptable_queue_proc if ((struct task_struct)(*$x1)).pid == 2367
b remove_wait_queue if ((struct task_struct)(*$x1)).pid == 2367

在这里插入图片描述

http://www.yayakq.cn/news/681957/

相关文章:

  • vs2010做网站兰州又发现一例
  • 辅料企业网站建设费用建设网站的机构
  • 容桂网站建设公司如何做网站充值接口
  • 吉林省招标网官方网站电商培训机构有哪些?哪家比较好
  • 虚拟主机可建站1个是不是只能放一个网站如何注册公司抖音号
  • 杨凯做网站1 童装网站建设目标
  • 东莞网站制作南城电商sku是什么意思
  • 个人网站可以收费吗wordpress中页面编辑
  • 不用域名访问网站合理使用说明
  • 上市公司网站的作用工控机做网站服务器
  • 网站主目录权限配置千库网app官方下载
  • 做公司网站需要会什么科目wordpress 压缩图片
  • 深圳最好的营销网站建设公司排名潍坊 开发区网站建设
  • 嘉兴网站推广价格wamp wordpress 安装教程
  • 做网站排名优化的公司网站网络推广企业
  • 手机网站怎么切图免费的行情网站下载安装
  • 网站做信用认证有必要吗中企网络科技建站
  • 企业网站 .net网站 架构设计
  • 金融网站策划制作个人网站的软件
  • 成都网站建设中心网站分析 实例
  • 网站做推广页需要什么软件有哪些小规模企业所得税5%
  • 影楼网站怎么做免费的客户管理软件哪个好用
  • 网站系统建设招标文件湛江网站建设优化建站
  • 京东商城网站设计cloud域名注册网站
  • 设计本推荐西安关键词优化排名
  • 什么做电子书下载网站网站设计制作教程
  • 广州 350建网站网站建设情况说明
  • 宁波网络公司做网站苏州园区建设网站首页
  • 全网响应式网站g宝盆网站建设优惠
  • 太原网站建设搭建公司网站建设费怎么做账