ARM
- Symbol
-
- link 후 자신만의 주소를 갖게 된는 단위
- object 파일
-
- 정확한 변수 주소 정보 없이 심볼 정보만 존재
- link 후 실행파일이 만들어졌을 때 변수의 주소가 결정된다
-
- 이 때 변수의 주소는 Symbol table을 참조하여 결정된다
- 보안이 걸린다
-
- =base 주소가 실행할 때마다 바뀐다
- C++의 가상 함수와 비슷
- 변수 분류
-
- symbol/ non-symbol
-
- symbol
-
- 직접적인 주소를 가진다
- 코드 내 어디에서든 접근 가능
- non-symbol
-
- ebp 기반의 상대적 위치로 접근한다
- esp 범위를 벗어나면 변수 내용이 보호받지 못한다
- 임베디드 메모리 구조
-
- RO(Read Only)
-
- .text : 코드
- .constdata : 상수
- RW
-
- .data : 초기값이 0이 아닌 static이나 전역변수
- ZI
-
- .bss : 초기값이 0인 static이나 전역변수
- ELF 구조(Executable and Linkng Format)
-
- .obj(.o) 파일 구조 중 하나
- 컴파일러 -c 옵션: link하지 말라는 뜻
- readelf 명령어로 확인
-
- fromelf 명령어로 elf 파일 구조 확인
========================================================================
** ELF Header Information
File Name: main.o
Machine class: ELFCLASS32 (32-bit)
Data encoding: ELFDATA2LSB (Little endian)
Header version: EV_CURRENT (Current version)
File Type: ET_REL (Relocatable object) (1)
Machine: EM_ARM (ARM)
Entry offset (in SHF_ENTRYSECT section): 0x00000000
Flags: None (0x02000000)
EABI conformance : ARM EABI Version 2.
Built with
Thumb C Compiler, ADS1.2 [Build 848]
Header size: 52 bytes (0x34)
Program header entry size: 32 bytes (0x20)
Section header entry size: 40 bytes (0x28)
Program header entries: 0
Section header entries: 8
Program header offset: 0 (0x00000000)
Section header offset: 620 (0x0000026c)
Section header string table index: 1
========================================================================
** Section #1 '.shstrtab' (SHT_STRTAB)
Size : 88 bytes
** Section #2 '.symtab' (SHT_SYMTAB)
Size : 160 bytes
String table '.strtab'
Last local symbol no. 5
** Section #3 '.strtab' (SHT_STRTAB)
Size : 151 bytes
** Section #4 '.comment' (SHT_PROGBITS)
Size : 88 bytes
** Section #5 '.text' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
Size : 4 bytes (alignment 4)
main
$t
.text
0x00000000: 2000 . MOV r0,#0
0x00000002: 4770 pG BX r14
** Section #6 '.debug_frame$$$.text' (SHT_PROGBITS)
Size : 60 bytes
** Section #7 '.rel.debug_frame$$$.text' (SHT_REL)
Size : 16 bytes
Symbol table '.symtab'
2 relocations applied to section #6 '.debug_frame$$$.text'
---------------------------------------------------------
Winsock
- Win32 프로그램
-
- OS에서 던져주는 message에 의해서 구동
- WinMain에서 폴링 방식으로 message 입력을 감시
- 리눅스에서 select()를 사용
-
- select()를 이용해 폴링 방식으로 입력을 감시하는 방법
-
- 폴링 방식 인터럽트와 비슷
- 각 소켓에 대한 입력을 동시처리하지 않도록 하기 위해서
-
- 다른 소켓에 입력 메시지를 전송해야하는데 접속 인원이 많아질수록 관리하기 힘들어진다
- 스레드의 특징
-
- 메인 프로세스가 죽으면 안의 스레드도 죽는다
- 메인 프로세스의 전역 변수를 공유할 수 있다 -> 데이터 공유가 편리
- 프로세스를 만드는 것보다 메모리 소모를 더 줄일 수 있다
- 스레드 채팅 프로그램
-
- main 함수
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151202 강동조 개인업무일지 (5) | 2015.12.02 |
---|---|
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 ASSEMBLY 5일차/WinSock 3일차 (4) | 2015.12.02 |
20151202 엄민웅 - arm 임베디드레시피 (교제 198~210) (5) | 2015.12.02 |
20151202 - 주재민 개인업무일지 (4) | 2015.12.02 |
20151201 - 강동조 개인업무일지 (5) | 2015.12.02 |