如何从具有内核读/写功能的ARM64程序中获取swapper_pg_dir地址?

问题描述 投票:0回答:1

我有一个可以读写内核内存的程序,我想获取swapper_pg_dir的地址。该设备正在运行具有ARM64架构的Android,并启用了kASLR。

swapper_pg_dir未打印到/ proc / kallsyms,我试图做的是从System.map获取swapper_pg_dir地址(通过编译内核源代码得到),并使用/ proc / kallsyms计算偏移量,并使用它来计算当前的swapper_pg_dir地址。但是,结果地址似乎是错误的,因为程序无法从中读取内存(从该地址读取内存会返回一些字符串,这些字符串大多采用“ u:object_r:#### _ prop:s0”的格式,通常在内存中发生未映射)

此外,由于引导加载程序已在此设备中锁定(并且不允许解锁),因此,闪存更新内核或加载内核模块也是不可选项。

那么,有什么可能的方法来获取swapper_pg_dir地址?可以从具有此结构作为变量的结构(地址以kallsyms导出或可以计算得出)中读取,但我尚未找到这种结构。

android linux-kernel memory-address arm64
1个回答
0
投票

您的最终目标是什么?

根据head.S

/*
 * swapper_pg_dir is the virtual address of the initial page table. We place
 * the page tables 3 * PAGE_SIZE below KERNEL_RAM_VADDR. The idmap_pg_dir has
 * 2 pages and is placed below swapper_pg_dir.
 */

并且KERNEL_RAM_VADDR是

#define KERNEL_RAM_VADDR    (PAGE_OFFSET + TEXT_OFFSET)

page_size可以从过程中查询。

这些地址将为您提供swapper_pg_dir的地址。

© www.soinside.com 2019 - 2024. All rights reserved.