[논문]A profiling method by PCB hooking and its application for memory fault detection in embedded system operational test
Linux 2012. 5. 27. 23:57Win CE 6.0 플랫폼에서 후킹하는 기법임. 리눅스에서는 다르게 해야함.
pcb 후킹 단계 - 메모리 폴트를 감지하는 후킹 함수 작성. malloc을 예로 작성.
1. 후킹 함수 준비.
스텝 1) 어떤 함수를 후킹 할지 결정하자. -우리는 malloc, free, memset 등
스텝 2) 목적을 위해 필요한 데이터들을 수집.(ex) profiling data for memory fault detection
2-1) memory fault detection 을 알기 위해 수집해야 하는 데이터들
* site : 메모리의 할당 및 해제가 발생하는 메모리 위치.
* Addr : 할당되거나 해제된 메모리 블락의 시작 주소.
* Size : 할당되거나 해제된 메모리의 사이즈.
* Usage: 메모리 용도? 사용량?
* Occurrence_count : 메모리 할당 요청 횟수에 따라 +1, 해제하는 횟수에따라 -1한다. 변수 하나를 가지고.
* Status : 각 메모리 주소마다 해당 주소에 최근에 할당, 해제, 접근 등 어떤 요청이 왔었는지가 기록되어있다.
a주소에 Status가 (0,0,0,0) 이라면, a주소의 공간은 해제만 최근에 4번 일어났다는 의미.
스텝 3) 후킹함수 작성
2. PCB의 위치 찾기.
스텝 1) Calculating the PCB base address
Step 2: Accessing the PCB memory space
3. PCB 후킹.(내가 원하는 주소로 특정 주소를 변경 - 함수테이블내에서)
정리 :
malloc을 후킹하고자 한다면.
먼저 hook_malloc 함수를 정의한다.(내가 하고자 하는 작업을 추가한 사용자 수정 malloc 함수)
해당 함수를 공유 메모리 공간에 올려야 한다.(모든 프로세스가 접근 가능 하도록)
그 다음 후킹 드라이버를 작성하여, 현재 프로세스의 pcb 내의
함수 테이블에서 malloc 함수의 시작 주소값을 내가 공유 메모리 공간에 추가해둔
hook_malloc 함수의 시작 주소 값으로 대체해준다. (후킹)
'Linux' 카테고리의 다른 글
PLT, GOT (0) | 2012.05.28 |
---|---|
리눅스에서 malloc과 같은 c라이브러리 함수 후킹하기. (0) | 2012.05.28 |
커널 수정 없이, system call hooking 하기. (0) | 2012.05.27 |
시스템콜만 후킹 가능한거 아니였어?!!! (0) | 2012.05.26 |
리눅스 커널 전체 소스 분석 사이트 (0) | 2012.05.24 |