与GCC等效的MSVC'/SECTION:.data,EWR'链接器选项

时间:2019-06-06 08:39:07

标签: gcc linker-flags

我想在编译时将EWR(Execute / Write / Read)内存属性添加到.data节。

MSVC编译器可以通过简单地添加“ /SECTION:.data,EWR”链接器选项来实现此目的。

但是我不知道如何在GCC编译器(MinGW)中执行此操作。

请帮助!

1 个答案:

答案 0 :(得分:1)

我能想到的最简单的方法是将虚拟文件添加到具有所需标志的 <SplitPane dividerPositions="0.5" orientation="VERTICAL" prefHeight="200.0" prefWidth="342.0" AnchorPane.bottomAnchor="363.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <items> <HBox maxHeight="-Infinity" prefHeight="46.0" prefWidth="346.0"> <!-- removed maxWidth here --> <children> <MenuButton alignment="TOP_LEFT" mnemonicParsing="false" prefHeight="46.0" prefWidth="56.0" HBox.hgrow="ALWAYS"> ... </MenuButton> </children> </HBox> ... </items> </SplitPane> 节的链接中。该伪文件很容易使用汇编生成:

.data.*

(假设您使用.section .data.fake, "axw" 在ELF平台上)。

说,包含上述内容的文件称为gas,那么您可以手动对其进行汇编,然后将结果添加到链接中

dummy.s

或者只是将assebmly文件传递给驱动程序:

as dummy.s -o dummy.o
gcc <all your normal .o files> dummy.o  # or `ld`

请注意,汇编器会发出警告:

gcc <all your normal files> dummy.s

由于异常标志。确实会按要求设置它们。

现在,让我解释一下发生了什么。

所有输入Warning: setting incorrect section attributes for .data.fake 部分都合并到输出.data*部分中。请参阅默认的链接描述文件(.data):

ld --verbose

输出部分的标志是输入部分的标志的并集(我很确定此行为已在链接器手册中说明)。这就是技巧的原理。然后,将包含结果.data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } 的段的标志也计算为它包含的节的标志的并集。请查看.data的输出,以确保获得期望的结果。我有

readelf -lW