我正在尝试链接特定的.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地址?(我相信这是允许的)
使用不同的部分起始地址时是否有任何要求?