繁体   English   中英

用户空间地址为0xfff <something>

[英]User-space address at 0xfff<something>

我调试的GDB一个简单的程序,我看地址栈帧中的局部变量,看起来像下面- 0xffffbc100xffffc340等。

据我了解,内核空间地址占0xffffffff0xcfffffff ,而用户空间地址从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM