Linux 如何修改GNU链接器,使其具有独立的';RWE&x27;PT_负载段
我有一个程序,当使用deafult选项转换成二进制时,我得到了这个Linux 如何修改GNU链接器,使其具有独立的';RWE&x27;PT_负载段,linux,gcc,linker,executable,elf,Linux,Gcc,Linker,Executable,Elf,我有一个程序,当使用deafult选项转换成二进制时,我得到了这个 >readelf -lW /tmp/sample Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x13e33f 0x13e
>readelf -lW /tmp/sample
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x13e33f 0x13e33f R E 0x200000
LOAD 0x13e510 0x000000000073e510 0x000000000073e510 0x005160 0x007cc8 RW 0x200000
我希望在上面显示的带有RW的加载段(即数据段)之后,有一个具有RWE权限的单独加载段。实现这一点的一种方法是修改定制GNU链接器脚本,以选择我的新部分,并将它们放在bss段之后的单独段中。这将使其显示为第三个加载段
在链接器脚本中的bss结束后添加此
.my_section = .;
.my_section : { *(.my_section)}
这就是它的样子
>readelf -lW /tmp/sample
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x13e33f 0x13e33f R E 0x200000
LOAD 0x13e510 0x000000000073e510 0x000000000073e510 0x005160 0x007cc8 RW 0x200000
LOAD 0x13f000 0x000000000073f000 0x000000000073f000 0x0d6b00 0x0d6b00 RW 0x200000
如何在此段中获得可执行权限?我需要对链接器脚本做哪些更改?我想这是因为你的.my_部分没有SHF_EXECINSTR。我认为你需要使用
PHDRS