instruction pointer과 malloc함수 질문입니다.
안녕하세요. 아무리 구글링을 해봐도 해결이 안되서 여기에 질문을 드립니다.
제가 프로그램을 작성해서 pin을 이용해서 분석하는 작업을 하려고 pin을 공부중인데요.
pin 예제 중에 Memory Reference Trace라는 것이 있어 간단한 프로그램을 작성해서 돌려보았습니다.
Memory Reference Trace는 프로그램을 실행하면서 메모리를 읽거나 쓰는 명령어이면 각각의 명령어의 ip와 메모리 주소값을 출력해주는 프로그램인데요.
결과를 보고 좀 이상해서 질문드립니다.
제가 알기로는 ip는 명령어의 주소를 나타내는거라 어셈블리어로 바꾸었을 때의 주소를 말하는 걸로 알고 있었는데요. 위의 Memory Reference Trace를 실행해보니 아래처럼 어셈블리 코드의 주소와는 다른 ip값들이 찍혀서 혹시 이 값들은 뭘 의미하는지 궁금합니다.
------------------------------------------------------------------
IP READ/WRITE ADDR
0x7fffe47f5fd8: R 0x7fffffffddb8
0x7fffe47f5fdd: R 0x7fffffffddc0
0x7fffe47f5fe2: R 0x7fffffffddc8
0x7fffe47f5fe7: R 0x7fffffffddd0
0x7fffe47f5ff0: R 0x7fffffffddd8
0x401406: W 0x7fffffffde00
0x40140a: R 0x7fffffffdde8
0x40140e: W 0x603010
0x401414: R 0x7fffffffdde8
0x40141c: W 0x603018
-------------------------------------------------------------------
밑에 0x401406같은 부분은 어셈블리코드를 가리키는 ip같은데 위에 0x7fff로 시작하는 값들은 뭘 말하는 건지 궁금합니다.
그리고 한가지더 궁금한게 있는데 malloc을 사용하다보니 메모리사이즈가 128K이하일 경우에는 낮은 주소(0x40~으로 시작하는 주소)에 할당이되고 128K이상일 경우에는 높은 주소(0x7fff~로 시작하는 주소)로 할당이 되는데 왜그런건지요.. heap영역이 64bit에서는 2군데로 나누어져 있는건가요??
제가 사용한 환경은 ubuntu 12.04 64bit 입니다.
댓글 달기