2016-10-10 7 views
1

dbghelp.dll의 SymGetLineFromAddr64()을 호출하여 dbghelp.dll을 사용하여 줄 주소 정보를 얻을 수 있습니다.dbghelp.dll을 사용하여 주어진 주소에서 어셈블리 코드를 가져올 수 있습니까?

해당 주소의 소스 코드 정보 (예 : 줄 번호 및 파일 이름) 만 제공합니다. 그러나 WinDBG에서 주어진 주소의 어셈블리 코드를 얻을 수도 있습니다. dbghelp.dll을 사용하여 어떻게 할 수 있는지 잘 모르겠습니다. 가능하지 않다면 다른 DLL을 사용할 수 있습니까?

+2

dbghelp.dll이 아니라 [디버거] (https://msdn.microsoft.com/en-us/library/windows/hardware/ff552179(v=vs.85) .aspx) 작업입니다. . 또는 ReadProcessMemory()를 사용하십시오. –

답변

1

dbghelp에서 디스 어셈블리리스트를 얻을 수 있다고 생각하지 않습니다. 그러나 회선을 분해 할 때 지침의 올바른 시작 주소가 지정되어있는 한 무료 OllyDbg Disassembler 2.01 엔진을 코드에 통합하는 것은 사용자가 원하는 것보다 더 많은 작업이 가능하지만 매우 쉽습니다. 즉 : dbghelp가 처리하는 중간 명령 인 주소로 시작하지 마십시오. 즉, x86 코드를 분해하려고한다고 가정합니다.

유일한 트릭은 현재 행의 길이에서 얼마나 많은 바이트를 얻는 지 알 수 있도록 현재 행의 시작부터 64 바이트의 하드 코드 된 양보다 더 좋아지기를 원한다면 얼마나 많은 양의 디스 어셈블해야하는지 알 수 있습니다. 사전에 SymEnumLines()를 통해 모듈의 모든 소스 행을 열거 한 경우 해당 정보를 사용하여 현재 행뿐만 아니라 다음 행까지의 바이트 수를 찾을 수 있습니다.