![](/img/trans.png)
[英]How to find the physical address of a variable from user-space in Linux?
[英]User-space address at 0xfff<something>
我调试的GDB一个简单的程序,我看地址栈帧中的局部变量,看起来像下面- 0xffffbc10
, 0xffffc340
等。
据我了解,内核空间地址占0xffffffff
到0xcfffffff
,而用户空间地址从0xbfffffff
开始。
为什么这里有差异?
编辑:请注意,我已关闭虚拟地址空间随机化,堆栈保护程序,并正在使用-m32进行编译。 这是我的编译命令(如果有帮助的话):
gcc -m32 -z execstack -fno-stack-protector -ggdb -static test.c -o test
如果要在64位主机(和64位内核)上运行32位程序,则整个32位地址空间通常可供应用程序使用。 原则上,在32位内核上也是可行的,但是Linux和(其他所有)主要内核保留了虚拟地址空间的一部分,以使用户和内核模式之间的切换更加有效。
32位程序仅具有3GB虚拟地址空间的假设是无效的,但是由于某些旧版程序错误地假设了这一点,因此Linux“个性”系统使您可以通过模拟此行为来运行它们。 可以通过setarch
命令的-3
选项进行访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.