2016-08-17 10 views
0

Windows X64에서 텍스트 편집기 용 디버거를 쓰고 있습니다. 나는 breakpoint와 step-over/step-out을 구현했다. 내가 기본적으로 현재 라인 (내가 PDB 파일과 DbgHelp을 통해 얻는)에서 명령어의 주소를 얻고 다음 라인에서 그 주소 사이에 'call'명령어가 있는지 알아보아야하기 때문에 step-in에서 멈춘다. , 그렇다면 단계별로 단계별로 진행하십시오.디스어셈블러없이 '통화'명령을 검색 하시겠습니까?

DbgHelp/PDB를 통해이 정보를 얻거나 (디스어셈블러를 쓰거나 사용할 필요없이) 얻을 수있는 방법이 있는지 궁금합니다. 또는 어쩌면 명령의 특정 바이트 순서를 활용할 수도 있습니다 '호출'은 고유하고 단 하나의 방법은 그 바이트가 정렬 그래서 난 바이트로 읽을 수 있고 그들이 '전화'와 일치하는 경우 볼 수 있습니까? (그런 식으로 나는 전체 또는 심지어 부분적인 재앙을 할 필요가 없다)

아이디어? 어떤 도움을 주시면 감사하겠습니다.

답변

0

불행히도, 그렇지 않습니다.

x86_64의 코드 callq의 가장 일반적인 연산 코드는 e8이지만, 다른 컨텍스트에서 e8에서 e8 의미 callq을 구별 할 수있는 방법 완전 곳을 파악하는 바이너리를 분해하지 않고 (예를 들면 일정의 일환으로) 없다 각 명령이 시작됩니다. x86은 가변 길이 명령어를 사용하므로 명령어 시작 위치가 항상 명확하지는 않습니다.