我正在开发一个模拟器,它的指令跟踪来自QEMU模拟器。跟踪中的指令指针是虚拟指令指针。
我对32位Linux操作系统的基本理解是,在4GB的地址空间中,较低的3GB (即0-3GB )保留给应用程序,而上层的1GB (即3GB-4GB )保留给内核。
我的基本理解正确吗??
为了确定指令的上下文,即内核或应用程序,我使用了一个简单的check ip>3G。这有效吗??
还有一件事,这个简单的方法能很容易地扩展到64位操作系统吗?
发布于 2013-07-30 08:06:33
我想你是在说x86吧。
内核中有不同的虚拟内存拆分选项,可以在其配置文件中设置。看看VMSPLIT_*选项在arch/x86/Kconfig中的应用。
3G / 1G,2G / 2G,1G / 3G都是可能的。
要可靠地检查地址是属于用户空间还是属于内核空间,可以将其与TASK_SIZE值进行比较:
static int
is_user_space_address(unsigned long addr)
{
return (addr < TASK_SIZE);
}至少可以在32位和64位x86系统上工作.
https://stackoverflow.com/questions/17939970
复制相似问题