본문 바로가기
코스웨어/15년 스마트컨트롤러

20151202 - 권오민 - ARM ASSEMBLY 5일차/WinSock 3일차

by 알 수 없는 사용자 2015. 12. 2.
728x90
반응형

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
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이다.

728x90