10-16-2019, 10:22 PM
这几天调固件遇到了不少关于链接脚本和PIE的问题,在把固件调通之后,还是有不少问题没搞明白。
binutils 里的链接脚本有一个 AT(laddr) 命令,可以把一个节(section)在重定位地址不变的情况下,改变装载地址(loader装载ELF文件之后该节所在地址),那么它对其他节的位置有什么影响,最后会怎么影响用objcopy生成给ROM使用的bin文件的大小?
此外在编译时加 -fPIE 生成的程序区别很大,在固件中没有一个和操作系统类似的loader的时候,用 -fPIE 很可能生成的代码是无法正确执行的。加载器到底是怎么处理PIE程序的?
binutils 里的链接脚本有一个 AT(laddr) 命令,可以把一个节(section)在重定位地址不变的情况下,改变装载地址(loader装载ELF文件之后该节所在地址),那么它对其他节的位置有什么影响,最后会怎么影响用objcopy生成给ROM使用的bin文件的大小?
此外在编译时加 -fPIE 生成的程序区别很大,在固件中没有一个和操作系统类似的loader的时候,用 -fPIE 很可能生成的代码是无法正确执行的。加载器到底是怎么处理PIE程序的?