将.text部分更改为低于默认地址

时间:2015-06-22 19:08:49

标签: linux linker

我正在尝试链接特定的.text段地址(低于linux / x86的默认地址0x08048000),

"gcc -Ttext 0x00849a40"

程序编译,链接和运行没有任何问题,但当我尝试使用不同的地址时:

"gcc -Ttext 0x00840000"

程序会产生分段错误。

如果我尝试任何高于0x00840000的地址,与其他部分不冲突,例如

 "gcc -Ttext 0x09000000" or "gcc -Ttext 0x091111111" 

程序也可以编译,链接和运行,没有任何问题。

我理解:

  • 0x08048000 是ld在Linux / x86上启动第一个 PT_LOAD 段的默认地址。在Linux / amd64上,默认值为 0x400000 ,您可以使用自定义链接描述文件更改默认值。

  • 我查看" / proc / sys / vm / mmap_min_addr"是0x10000和" / proc / self / maps"确保.text部分不会使用上述任何内存地址。

  • 文本部分应该对齐16,上述地址0x00849a40和0x00840000都是。

所以我的问题是:

  • 是否允许使用低于默认值的section-start地址?(我相信这是允许的)

  • 使用不同的部分起始地址时是否有任何要求?

0 个答案:

没有答案