在Linux syscall ptrace的文档中,我看到了以下文本:--剪--Linux没有单独的文本和数据地址空间,所以--剪--这在多大程度上是事实呢?.text和.data真的是存储为一个吗?这是否意味着我可以像在data中那样在text中定义东西?谢谢
ptrace
.text
.data
data
text
sshcrbum1#
他们不是这么说的它们位于一个平面虚拟地址空间的不同区域中。在哈佛机器上,作为数据地址的地址0x1000将访问与作为代码地址的地址0x1000不同的字节,因为它们是不同地址空间中的地址。拥有多个地址空间就像街道地址,其中123 Church St。是与图灵街123号不同房子(存储单元)。但是Linux的内存模型不是这样工作的;所有页地址都是唯一的整数,因为每个进程只有一个虚拟内存地址空间。因此,您可以绘制一个内存Map,其中.text和.data部分是同一空间的不同部分。它们使用不同的权限进行Map(read+exec与read+write),假设您没有使用任何特殊的链接器选项,但unsigned char *可以从其中任何一个读取字节。
0x1000
unsigned char *
1条答案
按热度按时间sshcrbum1#
他们不是这么说的它们位于一个平面虚拟地址空间的不同区域中。
在哈佛机器上,作为数据地址的地址
0x1000
将访问与作为代码地址的地址0x1000
不同的字节,因为它们是不同地址空间中的地址。拥有多个地址空间就像街道地址,其中123 Church St。是与图灵街123号不同房子(存储单元)。但是Linux的内存模型不是这样工作的;所有页地址都是唯一的整数,因为每个进程只有一个虚拟内存地址空间。
因此,您可以绘制一个内存Map,其中
.text
和.data
部分是同一空间的不同部分。它们使用不同的权限进行Map(read+exec与read+write),假设您没有使用任何特殊的链接器选项,但unsigned char *
可以从其中任何一个读取字节。