linux - 根据指令指针确定上下文

标签 linux linux-kernel virtual-address-space

我正在开发一个模拟器,其指令跟踪来自 QEMU 模拟器。迹线中的指令指针是虚拟指令指针。

我对 32 位 Linux 操作系统的基本理解是,在 4GB 地址空间中,低 3GB 即 0-3GB 保留给应用程序,高 1GB 即 3GB-4GB 保留给内核。

我的基本理解是否正确??

为了确定指令的上下文,即内核或应用程序,我使用了一个简单的检查 ip>3G。这有效吗??

还有一点,这种简单的方法是否可以轻松扩展到 64 位操作系统??

最佳答案

我假设您在谈论 x86。

内核中有不同的虚拟内存分割选项,可以在其配置文件中设置。查看 arch/x86/Kconfig 中的 VMSPLIT_* 选项.

3G/1G、2G/2G、1G/3G皆可。

要可靠地检查地址是属于用户空间还是内核空间,您可以将其与 TASK_SIZE 值进行比较:

static int
is_user_space_address(unsigned long addr)
{
    return (addr < TASK_SIZE);
}

至少适用于 32 位和 64 位 x86 系统。

关于linux - 根据指令指针确定上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17939970/

相关文章:

c - 在读取期间完全清除调制解调器模块串行缓冲区

linux - 设置日志文件的最大行数

elf - ELF重定位偏移什么时候需要基地址

process - 地址空间(进程的)和进程控制 block (PCB)在操作系统中如何相关?

linux - 移动你的工作副本

c - BPF 验证器说程序超过 1M 指令

32 位和 64 位架构中结构成员对齐的混淆

linux - Shell 脚本,在执行一段时间后杀死进程

c - 关于 Spectre 示例,虚拟/物理地址如何工作?

python - 在python中获取文件的自定义属性