我在使用 ld 链接两个目标文件时,使用 -Ttext 0 选项,但是链接后的代码,结果文件中的符号地址要比实际的地址小 0x1000,这是怎么回事
时间: 2024-05-20 17:13:02 浏览: 86
arm-linux-ld指令详细讲解.doc
这是因为在链接时使用了 `-Ttext 0` 选项,指定了代码段的起始地址为 0,而在实际运行时,操作系统会将程序加载到一个虚拟地址空间中,此时代码段的起始地址不一定为 0。
为了保证安全性和灵活性,操作系统会在程序的代码段和数据段前预留一段空间,这段空间称为虚拟空间或加载空间,用于存放操作系统的代码和数据。因此,在实际执行时,代码段的起始地址可能会被操作系统映射到一个比 0 大的虚拟地址上。
因此,如果在链接时使用 `-Ttext 0` 选项,实际的代码段起始地址就会被映射到一个比 0 大的虚拟地址上,导致符号地址比实际地址小 0x1000。如果要解决这个问题,可以在链接时指定一个比 0 大的地址作为代码段起始地址,以确保符号地址正确。
阅读全文