(* 참조 - https://sploitfun.wordpress.com/2015/02/11/syscalls-used-by-malloc/)
malloc은 메모리 할당을 위해 사용하는 함수이다. 그 내부에서는 실제로 메모리를 할당받기 위해 시스템콜을 사용한다.
: brk는 프로그램 break location을 증가시키므로써 메모리를 획득한다.
sbrk의 경우 인자 값으로 확장하고 싶은 사이즈를 적고, 리턴값으로는 확장되기 이전의 program break를 반환한다. 그렇기에 저 위의 코드 sbrk(0)를 사용하게 되면 확장 사이즈는 0이므로 program break의 변화는 없고, 이전(변화가 없으니 현재) break location을 알 수 있다.
그 다음 방식은 mmap이다.
mmap
: mmap은 호출한 프로그램이 사용하고 있는 영역에 대해 메모리를 잡는 것이다.
malloc은 메모리 할당을 위해 사용하는 함수이다. 그 내부에서는 실제로 메모리를 할당받기 위해 시스템콜을 사용한다.
두가지 brk와 mmap 시스템콜을 사용한다.
(malloc)
: brk는 프로그램 break location을 증가시키므로써 메모리를 획득한다.
brk 를 확인해보기 위해 아래와 같이 코드를 작성한다.
(brk 테스트)
(brk 메뉴얼)
sbrk의 경우 인자 값으로 확장하고 싶은 사이즈를 적고, 리턴값으로는 확장되기 이전의 program break를 반환한다. 그렇기에 저 위의 코드 sbrk(0)를 사용하게 되면 확장 사이즈는 0이므로 program break의 변화는 없고, 이전(변화가 없으니 현재) break location을 알 수 있다.
실행한 결과를 확인해보자.
(brk 되기 전)
실제 메모리 모습을 확인해보면
(메모리 모습(brk 전))
brk를 한 후 결과를 확인해본다.
(brk 후)
메모리 상황을 확인해보면
(메모리 (brk 후))
마지막으로 brk를 원래 위치로 되돌리는 것 까지 확인해보자.
(원위치)
(메모리 상황)
그 다음 방식은 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 |