Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly .rodata和.rdata之间有什么区别_Assembly_Portable Executable_Segment_Readonly Variable - Fatal编程技术网

Assembly .rodata和.rdata之间有什么区别

Assembly .rodata和.rdata之间有什么区别,assembly,portable-executable,segment,readonly-variable,Assembly,Portable Executable,Segment,Readonly Variable,我看到.rodata和.rdata都被用作段。我应该使用哪一种?它们之间的区别是什么 .rodata和.rdata之间有什么区别 主要(唯一?)区别在于文化 对于链接器和加载程序(以及对象文件格式),可以使用任何您喜欢的名称。只要(在链接过程中)应该在同一节中的内容对该节使用相同的名称,并且该节的属性得到了充分描述(例如,使用链接器脚本,包括操作系统的默认链接器脚本),这并不重要。如果您愿意处理额外的麻烦,也不会有任何东西阻止您使用多个单独的部分(例如,“rdata_初始化”、“rdata_频繁

我看到
.rodata
.rdata
都被用作段。我应该使用哪一种?它们之间的区别是什么

.rodata和.rdata之间有什么区别

主要(唯一?)区别在于文化

对于链接器和加载程序(以及对象文件格式),可以使用任何您喜欢的名称。只要(在链接过程中)应该在同一节中的内容对该节使用相同的名称,并且该节的属性得到了充分描述(例如,使用链接器脚本,包括操作系统的默认链接器脚本),这并不重要。如果您愿意处理额外的麻烦,也不会有任何东西阻止您使用多个单独的部分(例如,“rdata_初始化”、“rdata_频繁使用”和“rdata_很少使用”来改进缓存位置)


但是,为了方便起见(考虑到大多数人对节不做任何特殊处理),为了确保工具对同一节使用相同的名称,编译器将某些操作系统的“正常”作为默认值,并将Windows的“.rdata”(因为这对Windows是正常的)和*nix克隆的“rodata”作为默认值(因为这在Unix中是正常的)。

中使用RODATA,而在中使用RDATA。最接近的等价物是uu TEXT,u const.

它取决于对象文件格式。Windows上使用Windows PE formatUsing
.RDATA
,Linux/Unix系统上使用
.RODATA
(至少在ELF对象文件中,IDK关于MacOS Mach-O)。重要的是文件的使用者,如果使用者是加载二进制文件以在操作系统(可能是版本)上执行的软件,则您希望遵守该要求。如果您正在制作自己的工具以使用或不关心(例如裸机)然后,至少在gnu工具中,将名称更改为您想要的名称是很简单的。bob、.ted、.foo、.bar…使用该消费者的现有(工作)工具,并查看这些工具生成和使用了什么。一旦您知道这些工具起作用,您当然可以进行实验,看看其他形式是否也起作用。rodata不是指“只读”吗如果你有一个字符串(“hello world”),那不是代码,所以它是数据。但它是不可写的数据。鉴于某些体系结构支持将内存页标记为可读/可写/可执行,包含不可修改数据的页可以放在“只读”页中。