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”),那不是代码,所以它是数据。但它是不可写的数据。鉴于某些体系结构支持将内存页标记为可读/可写/可执行,包含不可修改数据的页可以放在“只读”页中。