링커 스크립트에서 위치 카운터 작업을 이해하고 있다고 생각했지만 생각하지 않았습니다. 방금 내가 이해 한 것을 확인하기위한 간단한 테스트를했습니다. 라이브러리 호출없이 간단한 c 프로그램을 작성하고 gcc로 컴파일했다. 그런 다음 위치 카운터를 처음에 값으로 설정 한 링커 스크립트를 사용하여 링크했습니다. 다음은 링커 스크립트 내가 그것을 실행하지만, 단지 objdump를 출력을보고 싶지 않았다링커 스크립트의 위치 카운터
ENTRY(main)
addr = 0x8048000;
SECTIONS
{
.text addr :
ALIGN(0x1000)
{
*(text*);
*(.rodata*);
}
.data :
ALIGN(0x1000)
{
*(.data*);
}
}
다음 프로그램
int a = 6;
int main(){
return 0;
}
이다. 나는 엘프에 objdump -s
을했을 때 시작 주소를 0x8048000으로 표시해야한다고 생각했습니다. 또한 내가 무슨 일이 일어나고 있는지 이해하지 못하고 0000 에서 시작 코멘트 섹션이 외에 그러나 나는 항상 0000
Contents of section .text:
0000 b8000000 00c3 ......
Contents of section .data:
1000 06000000 ....
Contents of section .comment:
0000 4743433a 20285562 756e7475 20342e34 GCC: (Ubuntu 4.4
0010 2e332d34 7562756e 74753529 20342e34 .3-4ubuntu5) 4.4
0020 2e3300
로 시작하는 주소를 참조하십시오. 여기
은 (어떤 라이브러리없이 여전히) 링커 스크립트없이 objdump를 출력처럼 맵 파일 모양을 무엇Contents of section .text:
8048094 b8000000 00c3 ......
Contents of section .data:
804909c 06000000 ....
Contents of section .comment:
0000 4743433a 20285562 756e7475 20342e34 GCC: (Ubuntu 4.4
0010 2e332d34 7562756e 74753529 20342e34 .3-4ubuntu5) 4.4
0020 2e3300
링커 스크립트가 없으면 어떻게됩니까? –