gpt4 book ai didi

linux - 如何读取arm linux中的内核镜像?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:34 25 4
gpt4 key购买 nike

我正在尝试读取内核镜像并计算该镜像的校验和值。首先,我使用 smc 指令触发异常,并在异常处理程序中尝试读取图像的第一个字节。我真的不知道地址是什么,但是从一些文档中,我知道内核镜像在0x20008000、0x30008000或0xC0008000这样的地址中解压缩(他们称之为ZRELADDR,我真的不知道这是否是正确的地址......)。所以我尝试像这样读取内存:

uint32_t test;
test = * (uint32_t *)0x30008000;
DMSG("test : %x\n",test);

但是系统因数据中止异常而崩溃,

core data-abort at address 0x30008000
fsr 0x00000005 ttbr0 0x7df7006a ttbr1 0x7df7006a cidr 0x0
cpu #0 cpsr 0x200001b3
r0 0x00000090 r4 0x7df4bf51 r8 0x00000000 r12 0x00000000
r1 0x09010000 r5 0x806665e0 r9 0x00000000 sp 0x7df77f50
r2 0x0000000d r6 0x7f002000 r10 0x00000000 lr 0x7df273ff
r3 0x30008000 r7 0x7df77f60 r11 0x00000000 pc 0x7df052f0
ERR TEE-CORE:tee_pager_handle_fault:602: Unexpected page fault! Trap CPU
PANIC: tee_pager_handle_fault core/arch/arm/mm/tee_pager.c:603

我想我走错路了。有谁知道如何在运行时环境中读取内核镜像?

感谢您的帮助!

编辑:感谢您的回复。我说的是安全内核。我正在尝试检查 TrustZone 下内核的完整性,并确保内核没有受到损害。所以我想像哈希值这样的校验和可能会帮助我。另外,我是一个新手,正在尝试熟悉arm的内存系统,所以我尝试从简单读取某些内存地址开始。我尝试按照Artless Noise所说读取0xc0000000,但同样的错误再次出现。我再次尝试在System.map中查找“_test”和“stext”地址,即0x80008000,再次出现错误。

最佳答案

RAM 的开头通常映射在 0xC0000000。这取决于 CONFIG_PAGE_OFFSET:

 - VMSPLIT_3G: 0xC0000000
- VMSPLIT_2G: 0x80000000
- VMSPLIT_1G: 0x40000000

请注意,如果您有 MMU(通常情况),则这是一个虚拟地址,物理地址将取决于您的实际架构(可能是也可能不是 0x00000000)。之后内核会在偏移量 0x8000 处加载几页。

因此,您可能可以在 0xC0008000 处找到(未压缩的)内核,但它也可能位于其他位置。

您还可以尝试 ioremap() 偏移 RAM 的 0x8000。

您能否向我们提供有关您正在开发的特定 SoC 的更多信息?

关于linux - 如何读取arm linux中的内核镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32706906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com