【发布时间】:2022-12-13 10:27:47
【问题描述】:
我正在尝试添加一个部分(除了预定义的部分)。我希望该部分是 RWX。
到目前为止我所拥有的是:
SECTIONS
{
.dictionary :
{
*(.dictionary)
}
}
INSERT AFTER .text;
我使用 -T 链接器选项。
我想在运行时将可执行代码放入其中。有点像可写的 .text 部分
我了解如何通过链接器 -N 选项使 .text 部分可写,但不想采用这种方法以避免意外写入。此外,它还排除了共享库的使用。
我也了解如何通过链接器 -zexecstack 选项将堆栈标记为可执行文件,目前正在使用它,但想看看是否可以添加新的部分。
我很难理解通过列出 --verbose 链接器选项获得的默认链接器脚本。
当我使用上面的内容时,我可以很好地链接。我可以尝试将可执行代码放入该部分,但可执行文件崩溃了。
任何人都有任何指示,或者最好是一个可行的解决方案?基本要求是有一个新的部分,我可以在其中分配空间,在其中放置可执行代码,然后从中执行。
【问题讨论】:
-
作为替代方案,如何在运行时使用 memmap() 来分配然后复制数据?
-
使用可执行堆栈,这是我的后备方案,比使用 memmap() 更可取。
标签: assembly linker linker-scripts