0
我試圖用自定義鏈接腳本來編譯這個簡單程序中的AMD-64的Linux機器上使用簡單的鏈接腳本提供了「搬遷截斷以適應:R_X86_64_32S」
// main.c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("Hello World!\n");
int* x = malloc(sizeof(int));
while(1) {}
return 0;
}
和
// script.ld
SECTIONS
{
. = 0x100000000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
}
但如果我這樣做gcc -T script.ld main.c -o main
,我得到 很多誤區像
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x12): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_fini' defined in .text section in /usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS)
如果我使用-fPIE -pie,我確定它會在4GB邊界之後加載嗎? – anotherCode245