根据指令指针确定上下文

时间:2013-07-30 06:42:52

标签: linux linux-kernel virtual-address-space

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

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

我的基本理解是否正确?

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

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

1 个答案:

答案 0 :(得分:2)

我假设你在谈论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系统。