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

20151202 윤재희 Memory Map과 Symbol 이야기, ELF format Object File에 관한 진실. -c option (기계어 세상), 멀티쓰레드

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

ARM ASM

==================================Outline====================================

Memory Map Symbol 이야기

ELF format Object File에 관한 진실. -c option (기계어 세상)

----------------------------------------------------------------------------

 

Memory Map과 Symbol 이야기

 

C에서는 변수나 명령어에 대한 심볼 테이블이 필요한다어셈블리의 경우에는 스택의 베이스 주소에서 떨어진 정도를 기준으로 변수를 사용하기 때문에 심볼 테이블이 필요 없다.

 

메모리 맵 파일은 실행파일을 만들 때 작성된다변수의 주소는 link 단계에서 결정된다실행 시 운영체제는 메모리의 보호를 위해 가상의 스택 베이스 주소를 설정하여 변수의 주소를 설정하기도 한다.

 

심볼테이블은 linker만이 참조한다. linking시 심볼 테이블의 심볼이 겹치는 경우 에러가 나기 때문에 똑같은 이름의 변수를 중복으로 사용할 경우 static 혹은 extern 명령어를 사용하여 linker가 정상적으로 실행될 수 있도록 해야 한다.

 

심볼 테이블은 모든 변수나 함수를 주소화 시킨다심볼 테이블은 한정된 메모리를 충돌 없이 사용하기 위해 존재한다.

 

지역 변수는 변수가 속한 함수에서 사용될 때즉 스택 포인터 아래에 있을 때만 보호 받는다해당 함수가 종료되면 변수는 사라지지는 않지만 더 이상 보호 받지는 못한다.

 

변동 없는 주소를 갖는 것은 함수와 전역변수지역변수는 스택의 베이스를 기준으로 한다.

 

 

 

 

변수를 보고 어느 영역에 해당하는지 구분할 수 있어야 한다.



ELF format Object File에 관한 진실. -c option (기계어 세상)

 

armcc로 컴파일한 obj파일을 hexaview사용하여 열어보자.

 

ELF형식임을 알 수 있다.

 

 

//시작 값인 0x7F는 10진수로 127, 아스키코드로 'DEL'키를 뜻한다.

 

 

SWS ESPC 0003 B-02를 검색하여 ARM ELF specification을 다운 받는다.

 

elf파일을 해석하는 프로그램이 linux에 존재한다. 'readelf'라는 명령어와 함께 object 파일 명을 입력하면 정보가 elf파일의 정보가 출력된다.

 

'fromelf'라는 명령어를 사용하여 binary로 된 데이터를 assembly로 바꿔서 출력해보자.




WinAPI

==================================Outline====================================

멀티쓰레드

----------------------------------------------------------------------------

멀티쓰레드


WinAPI에서는 select함수로 키보드 입력을 감시할 수 없다때문에 멀티쓰레드를 사용해야 한다.

 

쓰레드에 대해서 알아보자.

 

//java는 일반적으로 쓰레드로 구현된다.

 

WinAPI에서 winProc함수는 메시지를 지속적으로 기다린다운영체제가 메시지를 던져주면 그 값을 받아 처리한다.

 

우선 멀티쓰레드를 구동시키는 함수가 필요하다.

 

HANDLE CreateThread(

1. LPSECURITY_ATTRIBUTES lpThreadAttributes,

2. SIZE_T dwStackSize,

3. LPTHREAD_START_ROUTINE lpStartAddress,

4. LPVOID lpParameter,

5. DWORD dwCreationFlags,

6. LPDWORD lpThreadId );

 

 

 

 

main 함수 내에서 멀티 프로세스를 구현하면 main 함수의 실행이 멈추면 main에 속한 모든 프로세스가 종료된다때문에 쓰레드가 실행되는 동안 main 함수가 종료되지 않도록 유지시켜는 장치가 필요하다. 

 



 

멀티쓰레드를 구현하여 채팅을 구현해보자... 내일


 

 

728x90