함수 포인터가 가진 주소가 함수 주소가 아니다
- 오늘 nop코드 덮어쓰기 실습 도중 알게 된 사실인데 함수 포인터에 함수 주소가 바로 담기는게 아님
- 함수의 주소는 별도 메모리에 존재하고 그 함수의 시작점으로 jmp하도록 offset이 있는 배열이 있음
- 함수 포인터 외에도 함수의 주소에 접근하는 연산들은 (함수포인터를 DWORD로 바꿔서 담는다던가)
- 모두 이 offset 배열의 특정 인덱스를 가리키도록 되어 있고,
- 함수 포인터로 함수를 호출하면 이 인덱스로 점프 -> 인덱스에서 다시 함수로 점프
- drawCreatureHealthBarExample이 함수의 이름이고 조사식에서 함수의 실제 주소를 의미함
- 그리고 함수를 가리키는 함수포인터 mem이 있는데 함수랑 주소가 다름
- 함 수 : 0x00b770f0
- 함수 포인터 : 0x00b713f7
- 함수 포인터가 가리키는 주소로 가보자
빨간색 네모친 부분이 함수 포인터가 가리키는 곳
- 함수 포인터는 e9 f4 5c 00 00 이라는 뭔지 모를 5바이트를 가리키고 있다.
- 그래서 저게 뭔지 알아보니..
https://defuse.ca/online-x86-assembler.htm#disassembly2
- 현재 주소에서 offset하여 점프하는 기계어 코드였다.
- 현재 주소 + offset을 더해보니 실제 함수 주소가 나온다...!!
댓글