오늘은 main_arena의 symbol을 못찾을 때, 어떤 식으로 검색해야하는지 찾아보다가 한 블로그에서 __malloc_hook의 symbol을 통해 찾는 것을 보고 메모로 적어보려한다.
nm 명령어로 검색했을 때, system함수와 __malloc_hook의 offset은 나왔지만 main_arena의 offset은 나오지 않았다..
readelf 명령어를 통해 검색해도 마찬가지이다...
이러던 중 한 블로그를 보게 되었는데... 아래와 같이 적혀 있었다.
main_arena와 __malloc_hook + 0x10에 위치한다.
실제로 바이너리 파일을 하나 실행해보고, __malloc_hook과 main_arena의 주소를 찍어본 결과! 두둥 0x10(0x7ffff7dcdc40 - 0x7ffff7dcdc30)차이였다.
즉, 라이브러리의 베이스 주스를 구하려면 main_arena의 실제 주소 - (malloc_hook의 offset + 0x10) 이런 식으로 계산해주면 된다!
실제 계산한 결과와 vmmap을 통해 라이브러리의 베이스 주소를 살펴보면 일치한다!
p &__malloc_hook
p &main_arena
print/x 0x7ffff7dcdc40 - 0x3ebc30 - 0x10
vmmap
서칭하다보니 관련 Tool도 존재한다고 해서 작성해보려한다. 아래에 해당 Tool의 Github 주소를 적어두겠다.
👉 https://github.com/bash-c/main_arena_offset
git clone https://github.com/bash-c/main_arena_offset
git clone을 통해 gitbub에 있는 파일을 로컬로 복사해온다.
사용방법은 간단하다. main_arena [라이브러리 파일 경로]로 사용하면 된다!
-The end-
※ 참고
👉 https://juntheworld.tistory.com/m/87
👉 https://d41jung0d.tistory.com/114