1. .Preprocessor (.i) .c -> .s -> .o -> .elf -> bin
#ifdef :: 2중 define 막기위함
2. sta tic :: C++ : protect
> 자기 함수, .c파일내에서만 global
> exturn 불가
3. Volatile : 같은 주소에 값을 연달아 넣을때 최적화방지
4. symbol : 자신만의 주소를 갖는 단위 :: global
<> local : 자신만의 주소 X
5. const : ReadOnly : 값 따로 못줌
ex) const int i; > i 는 쓰레기값으로 평생 살아야함
i=3; >> X 컴파일에러
6.
RO, RW : read / write
> ROM 에 저장 > 값 유지
ZI : zero initialize :: 어짜피 0이니깐 유지필요 X > RAM
Malloc :: 동적메모리 > heap
local :: stack :: pc가 함
7. ELF format Object File
Linking View :: link 하기전의 .o file ( relocatable file )
Execution View :: link 후 실행가능한 ,elf file (executable file)
/*
#define EI_NIDENT 16
typedef struct {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
// 32_Half :: 16bit (2byte)
-e_type :
ET_REL 1 Relocatable file
*/
.o file Header,, size 52
00000000h: 7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 ; ELF............
// e_ident : 16 :: char :: 1 index > 1byte
00000010h: 01 00 28 00 01 00 00 00 00 00 00 00 00 00 00 00 ; ..(.............
>
1byte + 1byte = 2byte
01 00 :: Little endian > 00 01 :: 1
GCC bin utility -> readelf 에서 쉽게 볼 수 있음
8. compile 후의 기계여 (op code) 확인법
.o file > disassemble :: fromelf -c spaghetti.o
.o file Source,, disassemble
main
$t
.text
0x00000000: 2003 . MOV r0,#3
> 2003 :: code 영역 > little endian > 0320
>> 이 .o Header 52 byte 이후에 있나 보면,,
00000030h: 0B 00 01 00 03 20 04 21 40 18 10 18 70 47 00 00 ; ..... .!@...pG..
9. symbol table
symbol table
Name : Linker를 위한 symbol 이름,
Value: 각 section에서의 해당 symbol의 시작 offset 주소
// offset :: 변위차 ex) 100 + 9 = 109 > offset : +9
Size : Symbol의 크기 (Symbol이 function이나 object가 아닌 경우에는 0),
Type : Function, Object, Section 등을 나타내며,
Bind: Symbol의 scope를 한정 (Local, Global, Weak) .
(Ndx)
UND : 현재 file에서 사용되고 있지만, 실제 함수의 define이 없는 경우,
ABS : relocate 되어서는 안 되는 것
Ndx= 1 > text section
Ndx=3 > data
WEAK : LOCAL로만 쓰일 가능성이 큰 symbol
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
17: 00000000 10 FUNC GLOBAL DEFAULT 5 main
>
main:: FUNC ( 메인함수 라고 하죠)
> GLOBAL ( 함수니깐 global)
14: 00000000 4 OBJECT GLOBAL DEFAULT 6 zi
15: 00000000 4 OBJECT GLOBAL DEFAULT 7 rw
> zi, rw 역시 GLOBAL
링커가 이 table 을 이용하여 서로를 link 해
코드들 : .text
초기화 된 전역변수 : .data
초기화 되지 않은 전역 변수들 : .bss
'임베디드 > 임베디드 레시피' 카테고리의 다른 글
4장 ,안한부분 끝 // 완 (0) | 2025.01.28 |
---|---|
2장 이어서 ~ 3장까지 (완) (0) | 2025.01.26 |
2장 정리 (0) | 2025.01.24 |
1장 이어서 (0) | 2025.01.22 |
1장 정리안된부분 (0) | 2025.01.20 |