gpt4 book ai didi

linux - ARM Linux 在用户模式下将当前内核 SP 存储在哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:34 25 4
gpt4 key购买 nike

我有以下情况:Linux 操作系统(ARM)在虚拟平台上运行,并在操作系统中启动一个简单的程序,并在某个符号上设置断点。当遇到此断点时,我们就在用户空间中。

我的问题是:全面了解(当前正在运行的)进程(即内核 + 用户空间)的整个虚拟内存,我能以某种方式找出 task_structthread_info 结构位于内核堆栈的(底部)?我知道在内核模式下,可以在 SP 上使用掩码来获取内核堆栈的底部,但是如果 SP 指向用户空间中的某些内容,这将不起作用。本质上,我正在尝试做一些类似于内核中的 current/current_thread_info() 宏的事情。

我认为这很难/不可能的原因是因为内核堆栈地址是随机的,因此会随着每个新进程而变化。

我需要避免的事情:

  1. 系统调用:操作系统、内核和进程被“卡住”,我们有内存的静态 View
  2. 调用任何需要运行操作系统的函数

最佳答案

要在目标位于用户空间时确定管理员模式 SP,您需要检查 R13_svc 寄存器。

如果您采用此值并将 13 个最低有效位设置为零,则您应该拥有当前线程的 struct thread_info 的虚拟地址。

关于linux - ARM Linux 在用户模式下将当前内核 SP 存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33042901/

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