커널의 어셈블리 파일에 대해 ld
명령을 linux에서 사용하려고합니다. grub로 부팅하려면 1Mb 주소 뒤에 있어야합니다. 그래서 내 링크 스크립트는 주소 0x00100000에 텍스트가 있습니다.예기치 않은 링커 섹션 출력 위치
여기 내가 사용 링커 스크립트입니다 :
SECTIONS {
.text 0x00100000 :{
*(.text)
}
textEnd = .;
.data :{
*(.data)
*(.rodata)
}
dataEnd = .;
.bss :{
*(.common)
*(.bss)
}
bssEnd = .;
}
내 질문은 출력 파일에 관한 것입니다. 파일의 바이너리를 보면 텍스트 섹션이 0x1000에서 시작됩니다. 스크립트에서 텍스트 위치를 변경하고 0x500과 같이 0x1000보다 낮은 주소를 사용하면 텍스트가 시작됩니다. 하지만 0x1000 이상이 될 때마다 반올림합니다 (0x2500은 텍스트를 0x500에 놓습니다).
텍스트가 0x100000에 있어야한다고 지정하면 출력 파일에 해당 텍스트가 없어야합니까? 또는 바이너리의 다른 부분이 더 많은 이동이 필요하다는 것을 지정합니다. 커널 부팅에 문제가 있기 때문에 물어 보지만, 지금은 단순히 링커 출력을 이해하려고합니다.