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

2015.12.02_[ARM #5]_ELFfile, [Winsock #3] socket_이량경

by 알 수 없는 사용자 2015. 12. 2.
728x90
반응형
12/19~ C++특강 있음.
<ARM_ASM>✔ 

================================================================
198 p~

* 프로그램 적재방식

> C에서 ASM넘어 가면 값들이 주소기반이 된다.
> 심볼테이블에 변수들의 위치정보를 들고 있다.

> 데이터를 읽고 쓰는(변수는 읽고 쓰는것뿐) 이것의위치정보를 심볼 테이블이 가짐.

> 오브젝트가 여러개면 주소를 정리해야한다.


* 맵파일 : 위치가 어디에 존재한다-> 실행할때 나온다.

> 실행파일을만들때 구체적인 주소가 나온다. 오브젝트때까지는 어느 용량을 차지한다는 정보만 심볼에 존재한다.


* 심볼 3가지 형태
> RW, ZI, RO

* 지금 스택구조는 

> 기준 (EBP)주소 에 +0 +4 한다.
> 요즘에는 실행할때마다 주소가 바뀌는데.
> 기준주소를 바꿔버리기 때문에 실행시킬때만 위치를 알수있다.

> 동일한 변수 함수 사용 : 주소 충돌 이므로 extern이나 static(독립적)으로 명확히 겹치는 부분을 제거해야 한다.

EBP 와 ESP사이에 있어야 보호 대상이다.수명


<gcc 로 컴파일된 .o파일은 ELF파일>



* 파일구조 : 모든파일은 구조를 가짐.
* NTF는 공개되지 않음. 
> 남의것을 차용했던가. 핵심기술이던가 

<ELF file 내용물 확인>

- readelf 유틸 사용


* ELF fileView 만들면 된다. 재활용 하면 금방 만든다.

<ELF file 구조 확인>
- readelf 유틸 사용


<WinSock>✔ 
================================================================

20151202.c


> ServerProc : 스레드를 만들 함수의 이름.

HANDLE h = (HANDLE)_beginthreadex(NULL, 0, ServerProc, NULL, 0,(unsigned *)&dwID); //스레드 생성


WaitForSingleObject(h,INFINITE);  //스레드 종료를 기다림
* 스레드
> 자바는 기본적으로 스레드로 구현된다.

> 윈32 Message를 예를 들면 WndProc 계속 윈도우에서 실행된다.

>  메시지가 발생안하면 while은 동작안한다. 전반적인 폴링방식이다.

> 메시지를 운영체제가 던져 준다. 이 메시지 자체가 던지는입장(프로그램)에서 보면 인터럽트다.



> 셀렉트 없으면 키보드 누가 감시? 소켓 외부에서 들어온것 어떻게 감시? 동시에 쓰는것을 검사해야한다.

> 폴링방식으로 돌면서 다 체크 한다.

> 그래서 인터럽트 방식 사용. -> 소켓을 많이 쓰면골치아픔.
1번에대한것 수행.
2번에대한것 수행.
3번에대한것 수행.


> 만들어낼수록 연결이 복잡해진다. 관리부분이 복잡해진다. 그래서 셀렉트가 효율적인 기법이다.
> 메인에서 A수행 , B수행 해도 동시 수행될수 없다. 동시성x  :  순차적 실행이기 때문이다.

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

* A, B 실행 해결책 

1. 멀티 프로세스 방식 "fork"

> fork를 사용해서 왼쪽은 A만 수행/오른쪽은 B만수행


> 장점: A, B 동시 수행 가능. A가 속한 메인이 죽어도 B는 안죽는다.

> 단점: 중복이 많다.
---------------------------------------------

2. 스레드 

> 장점 : 자원을 아낄수 있다.(경량화된다)

> 단점 : 메인이 죽으면 A도B도 모두 같이 죽는다. 

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


> 셀렉트가 연결해주므로 심플해지는데 윈도우는 스레드를 사용할수밖에없게 구조가 되어있다.

HANDLE h = (HANDLE)_beginthreadex(NULL, 0, ServerProc, NULL, 0, (unsigned *)&dwID); //스레드 생성
> 이후로는 서버라는 스레드가만들어져 메인과 함께 돌고 있다.

 WaitForSingleObject(h,INFINITE);  //스레드 종료를 기다림 

> 이지점에서 내려가지 않는다. 스레드가 완성될때까지 동작을 보장한다.기다리는 함수 사용.




728x90