(* 참조 - https://sploitfun.wordpress.com/2015/02/11/syscalls-used-by-malloc/)


malloc은 메모리 할당을 위해 사용하는 함수이다. 그 내부에서는 실제로 메모리를 할당받기 위해 시스템콜을 사용한다.

두가지 brk와 mmap 시스템콜을 사용한다.


(malloc)


brk
: brk는 프로그램 break location을 증가시키므로써 메모리를 획득한다. 

brk 를 확인해보기 위해 아래와 같이 코드를 작성한다.


(brk 테스트)


코드에서 brk를 사용했는데, sbrk는 어떤 목적으로 사용하였을까?



(brk 메뉴얼)


brk 메뉴얼을 확인해보면, brk와 sbrk가 있다.

sbrk의 경우 인자 값으로 확장하고 싶은 사이즈를 적고, 리턴값으로는 확장되기 이전의 program break를 반환한다. 그렇기에 저 위의 코드 sbrk(0)를 사용하게 되면 확장 사이즈는 0이므로 program break의 변화는 없고, 이전(변화가 없으니 현재) break location을 알 수 있다.

실행한 결과를 확인해보자.



(brk 되기 전)


brk 되기 전 프로그램 Break Location의 주소이다.

실제 메모리 모습을 확인해보면


(메모리 모습(brk 전))


[heap] 영역의 끝이 프로그램 Break Location인 것을 확인 할 수 있다.

brk를 한 후 결과를 확인해본다.



(brk 후)


brk 후 프로그램 Break Location의 위치가 0x1000 늘어난 것을 확인 할 수 있다.

메모리 상황을 확인해보면


(메모리 (brk 후))


[heap]의 영역이 늘어난 것을 확인 할 수 있다.

마지막으로 brk를 원래 위치로 되돌리는 것 까지 확인해보자.


(원위치)



(메모리 상황)


brk를 이용해 다시 줄여보았다. 이로써 brk를 통해 메모리를 할당하는 방식을 알아보았다.

그 다음 방식은 mmap이다.
mmap
: mmap은 호출한 프로그램이 사용하고 있는 영역에 대해 메모리를 잡는 것이다. 

코드를 이용해 직접 확인해보자.



(테스트 코드)


mmap 되기 전 상황과 된 후 상황일 먼저 비교해볼 것이다.


(mmap 전)



(메모리 (mmap 전))


mmap 전 라이브러리 파일 영역이다.

그 후 mmap을 진행한다.



(mmap 실행)



(메모리 ( mmap 후))


기존에 있던 프로그램의 메모리 영역에 mmap을 통해 공간을 만든 것을 확인 할 수 있다.

munmap 후까지 확인해본다.



(munmap)



(메모리 ( munmap 후 ))


munmap 후 다시 프로그램에게 메모리가 반환되는 것을 확인 할 수 있었다.

'Hacking > System Hacking' 카테고리의 다른 글

(RootKit) Simple Rootkit  (0) 2018.04.12
(RootKit) LKM(Loadable Kernel Module)  (0) 2018.04.03
System Hacking - jmp (반복문)  (0) 2017.04.19
System Hacking - jmp (분기문)  (0) 2017.04.18
System Hacking - 어셈블리어(사칙연산)  (0) 2017.04.14

+ Recent posts