assembly 如何将RWX部分添加到Raspberry Pi的gcc可执行文件中

zpf6vheq  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在尝试添加一个部分(除了预定义的部分)。我希望该部分是RWX。
目前我所知道的是:

SECTIONS
{
  .dictionary :
  {
        *(.dictionary)
  }
}
INSERT AFTER .text;

我使用-T链接器选项。
我想在运行时将可执行代码放在其中。有点像一个可写的.text部分
我知道如何通过链接器-N选项使.text部分可写,但我不喜欢采用这种方法,以避免意外写入。
我还了解如何通过链接器-zexecstack选项将堆栈标记为可执行,目前正在使用它,但希望看看是否可以追加一个新的部分。
我很难理解通过列出--verbose链接器选项获得的默认链接器脚本。
当我使用上面的代码时,我可以很好地链接。我可以尝试将可执行代码放置在部分中,但可执行代码崩溃了。
基本要求是有一个新的部分,我可以在其中分配空间,将可执行代码放在其中,然后从其中执行。

dz6r00yl

dz6r00yl1#

我可能偶然发现了答案。-zexecstack解决方案可以工作,但通过Cortex M0+处理器上的BL将数据放置在分支之外很远的地方。
所以,我试着按照这里的注解:https://sourceware.org/binutils/docs/as/Section.html
而只是在my .s程序集文件中声明了一个节,如下所示:

.section ".dictionary", #alloc, #write, #execinstr
.align 2
H_START:
.space 0x20000
H_END:

这就像一个魅力,解决了我的问题。

相关问题