본삭금은 기본!
안녕하세요. 리버스엔지니어링 관련해서 IDA Pro와 Intel PIN을 사용하여 연구하고있는 초보 대학생입니다.
연구진행을 해보다가 궁금한것이 있는데요,
어떤 executable file을 ,
IDA Pro로 정적 분석했을때의 Instruction set 결과와,
실제로 실행시켰을 때 Intel PIN을 이용하여 instruction set을 본 결과가
조금씩 차이가 있습니다.
예를 들자면, IDA Pro에서는
address | instruction |
0x0001 | aa |
0x0002 | bb |
0x0003 | cc |
0x0004 | dd |
0x0005 | ee |
(단순화
시켜서 표현했습니다. 죄송합니다.)
위의 표처럼 출력이 된다고 합시다.
실제로 그 file을 실행시키고 pin으로 instruction과 그 주소값을 찍어봤을때는,
address | instruction |
0x0001 | aa |
0x0002 | bb |
0xffff | cd` |
| |
0x0005 | ee |
이런식으로 instruction이 조금 다르게 출력되는 부분이 있었습니다.
그리고 그 address값은, 0xffffffff로 출력이 되었고요.
이런식으로, binary file을 실제로 실행시킬때에는 instruction이 조금 변화되어(최적화되어) 실행되기도 하나요?
제가 위 결과를 보고 추측하기로는,
어떤 binary file을 직접 실행시킬때, CPU에서 하드웨어레벨에서 최적화가 발생해 instruction이 변하지 않는가 하는데...
어디까지나 제 추측이고요..ㅠㅠㅠ
왜 이렇게 결과가 다르게 나오는지 알려주실 수 있나요?
또.. IDA Pro에서나 Intel PIN에서나 항상 instruction이 같게 할수 있는 방법이 있을까요?