ARM ASSEMBLY |
◉11. Memory Map과 Symbol 이야기
●symbol
- Linker가 알아본 수 있는 기본 단위이다.
- linker로 넘어가면 모두 주소로 전환된다.
- symbol table의 쓸모가 없다.
- 오브젝트끼리 주소를 중복되지 않게 사용하기위한 목적이다.
- 오브젝트를 만들 때는 일종의 가상주소가 사용된다.
- 실행파일을 만들 때 실제 주소가 적용된다.
- 다른 기계어 코드나 다른 오브젝트로 인해 문제가 생길 수 있다.
- 과거에는 변수의 주소 값이 고정되어 해킹이 매우 용이했다.
- 현재의 stack는 기준이 되는 주소를 정해놓고 변수를 +0, +4 등으로 처리한다.
- 실행 시킬 때 마다 기준이 되는 주소 값을 변환한다.
- C++의 가상 함수도 유사하다.
- 오브젝트끼리 전역변수가 같은 상황이 발생하면 링커 에러가 발생하여 중단된다.
- symbol이 충돌했다.
- static을 사용하여 에러를 막을 수 있다.
- 같은 전역 변수라도 링커가 다른 위치에 위치시켜서 중복을 막는다.
- 함수는 주소 값 자체를 리턴하면 안 된다.
- 다른 것이 stack을 사용하게 되면 값을 덮어 쓴다.
- stack의 값이 변화한다.
- 함수가 끝난다고 사라지는 것은 아니다.
- return이 되면 가리키는 곳이 달라질 뿐 값이 없어지는 것은 아니다.
- 하지만 값이 보호 받지 못한다.
- 함수의 인자는 {}에서만 보호 받을 수 있다.
●ADS의 메모리 형태
- RW, ZI, RO 3가지가 있다.
- RW.
- read-write로서, 초기 값이 있는 전역변수를 의미한다.
- ZI.
- Zero-initialized로서, 초기 값이 0인 전역변수를 의미한다.
- RO.
- Read-only로서 수정이 불가능한 const 전역 변수와 text, code를 의미한다.
- const로 전역변수를 선언하면 RO에 포함된다.
●Flash MCP
- Flash.
- ROM, 전원이 꺼져도 그 내용을 계속 유지하는 메모리이다.
- RO.
- code하고, const data니까 우리는 항상 그 값을 유지하고 있어야 한다.
- ROM, 즉 Flash에 그 내용이 들어 있어야 한다.
- RW.
- 언제라도 modify 가능해야 하면서도, 초기 값을 가지고 있어야 한다.
- ROM에 있어야 하며, manipulation이 가능한 RAM에도 위치해야 한다.
- ZI.
- 값이 모두 0이므로 ROM에 저장할 필요 없이, RAM에 위치하면 된다.
◉12. ELF format Object File에 관한 진실
●ELF
- Executable and Linking Format을 의미한다.
- 실행 가능한 그리고 링크를 하는 형식을 말한다.
- relocatable file.
- 최종 실행 가능한 file이 아니라, link 가능한 object file이다.
- 나중에 link를 통해서 재배치가 가능하다.
- Assembler에 통과하여, link 가능하게 table 형태로 만들어 놓은 것이다.
- ELF format Object file.
- Assembler의 output이다.
- armcc와 cl의 object파일 내용.
●Object Format
- 전체적인 구조는 다음과 같다.
- Linking View
- Link하기 전의 object file(.o)이다.
- Execution View
- Link가 끝난 후에 완전한 실행 가능한 형태가 된 ELF 형식이다.
●ELF Header
- ELF Header 구조체는 다음과 같다.
#define EI_NIDENT 16 |
●readelf
- ELF file의 내용물을 볼 수 있다.
- readelf -h Xtest.o
- -h는 header option이다.
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151202 윤재희 Memory Map과 Symbol 이야기, ELF format Object File에 관한 진실. -c option (기계어 세상), 멀티쓰레드 (5) | 2015.12.02 |
---|---|
20151202-김재홍-ARM_Assembly (4) | 2015.12.02 |
2015.12.02_[ARM #5]_ELFfile, [Winsock #3] socket_이량경 (4) | 2015.12.02 |
20151202 / ARM_5, winsock_3- 남수진 (5) | 2015.12.02 |
20151202 엄민웅 - arm 임베디드레시피 (교제 198~210) (5) | 2015.12.02 |
20151202 - 주재민 개인업무일지 (4) | 2015.12.02 |
20151201 - 강동조 개인업무일지 (5) | 2015.12.02 |
20151201 주재민 업무일지 (4) | 2015.12.02 |