오브젝트를 만들 때는 일종의 가상주소가 사용된다. 실행파일을 만들 때 실제 주소가 적용된다.
다른 기계어 코드나 다른 오브젝트로 인해 문제가 생길 수 있다.
과거에는 변수의 주소 값이 고정되어 해킹이 매우 용이했다.
현재의 stack는 기준이 되는 주소를 정해놓고 변수를 +0, +4 등으로 처리한다.
실행 시킬 때 마다 기준이 되는 주소 값을 변환한다.
오브젝트끼리 전역변수가 같은 상황이 발생하면 링커 에러가 발생하여 중단된다. symbol이 충돌
static을 사용하여 에러를 막을 수 있다.
같은 전역 변수라도 링커가 다른 위치에 위치시켜서 중복을 막는다.
함수는 주소 값 자체를 리턴하면 안 된다. 다른 것이 stack을 사용하게 되면 값을 덮어 쓴다.
함수가 끝난다고 사라지는 것은 아니다. return이 되면 가리키는 곳이 달라질 뿐 값이 없어지는 것은 아니다. 하지만 값이 보호 받지 못한다.
함수의 인자는 {}에서만 보호 받을 수 있다. 지역변수가 보호 받기위해서는 EBP와 ESP 사이에 있어야만 보호 받을 수 있다
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에 위치하면 된다
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
#define EI_NIDENT 16 typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; } Elf32_Ehdr; |
구조체
readelf
ELF file의 내용물을 볼 수 있다.
readelf -h Xtest.o
-h는 header option이다.
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151207 - 홍준모 Linux 와 Window 간의 시리얼 통신 1일차, 케노니칼, 논 케노니칼 실습 (4) | 2015.12.07 |
---|---|
20151207 일일업무보고서_박서연_LinuxSerial통신 (6) | 2015.12.07 |
20151207 - 엄민웅 시리얼 통신 Canonical, Non-Canonical, Asynchronous, Multi Flexing (4) | 2015.12.07 |
20151207-김재홍-Serial_1일차-리눅스시리얼통신 (5) | 2015.12.07 |
20151202_박서연_일일업무보고서_ARM Assembly, WinSock (5) | 2015.12.03 |
20151202 김태현 개인업무일지 (5) | 2015.12.03 |
20151202_[안향진]_ARM어셈블리_4__WINSOCK_3 (6) | 2015.12.03 |
20151202 임현수 업무일지 ELF파일 포맷, 스레드 (4) | 2015.12.03 |