확인이 쿼리 WinDBG에서의 사용과 관련된하지 않거나 _NT_SYMBOL_PATH
Dr.Memory
함께 할 아무것도하지 않고는 유사 memory diagnostic tool
valgrind
에 있으며 원시 수정되지 않은 바이너리에 Dynamorio instumentation framework
가능한 기반으로
Windows의 경우 명령 프롬프트에서 drmemory.exe calc.exe
처럼 호출 할 수 있습니다. (cmd.exe)
01 23,516,
빨리 당신이 그것을하고 prepulled 심볼 파일에서 심볼 정보를 해결 설정 _NT_SYMBOL_PATH의 drmemory 명예가 (즉이 * .pdb 인)가 보이지 않는다 않았다면 바이너리가 results.txt
라는 이름의 로그 파일이 기본 위치
에 기록되어 실행을 완료로 pdb 인 파일이 없거나 밤은 아직
을 다운로드 한 경우는 단순히 SRV의 * 캐시를 무시하는 것 같다 만 다운 스트림 기호 폴더를 사용하는 것 MS 심볼 서버에서 파일을 다운로드 할
그렇게
RESULTS.TXT이 포함됩니다 스택 트레이스
기호 파일을 사용할 수 있다면 그렇게 기본적으로
# 6 USER32.dll!InternalCallWinProc
# 7 USER32.dll!UserCallWinProcCheckWow
당신은 질문 난 당신이 EXE 파일에 대한 기호를 가져 오기 위해 필요한 주석 정도로
에서 appplication에 대한 기호 파일이 필요합니다 보여줄 것 동안 3,691,363,210
# 6 USER32.dll!gapfnScSendMessage +0x1ce (0x75fdc4e7 <USER32.dll+0x1c4e7>)
# 7 USER32.dll!gapfnScSendMessage +0x2ce (0x75fdc5e7 <USER32.dll+0x1c5e7>)
질문에서
실행중인 프로세스에도 symchk를 사용하고 매니페스트 파일 을 만들 수 있으며 인터넷에 연결된 컴퓨터에서 symchk를 사용하여 을 다운로드 할 수 있습니다 기호와이 폴더에 non_internet 기계 및 포인트 _NT_SYMBOL_PATH의 로컬 폴더에 복사
>tlist | grep calc.exe
1772 calc.exe Calculator
>symchk /om calcsyms.txt /ip 1772
SYMCHK: GdiPlus.dll FAILED - MicrosoftWindowsGdiPlus-
1.1.7601.17514-gdiplus.pdb mismatched or not found
SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 27
>head -n 4 calcsyms.txt
calc.pdb,971D2945E998438C847643A9DB39C88E2,1
calc.exe,4ce7979dc0000,1
ntdll.pdb,120028FA453F4CD5A6A404EC37396A582,1
ntdll.dll,4ce7b96e13c000,1
>tail -n 4 calcsyms.txt
CLBCatQ.pdb,00A720C79BAC402295B6EBDC147257182,1
clbcatq.dll,4a5bd9b183000,1
oleacc.pdb,67620D076A2E43C5A18ECD5AF77AADBE2,1
oleacc.dll,4a5bdac83c000,1
그래서 기호 파일의 로컬 캐시 된 복사본 테스트를 다시 실행하는 것이 더 쉽습니다 당신이 기호를 가져온 한 가정
심볼을 가져 왔지만 테스트를 다시 수행 할 수없고 results.txt의 출력으로 만 작업해야하는 경우 일부 텍스트 처리 작업 (sed. grep, awk.또는 사용자 정의 파서는)
drmemory 제품군은 bin 폴더에 symbolquery.exe 함께 제공하고 당신이 modulebase하는 오프셋 상대를 알 수 위의 예에서 RESULTS.TXT
에서 기호를 해결하는 데 사용할 수 있습니다 라인에 0x1c4e7 # 추천 USER32.DLL! gapfnScSendMessage + 0x1ce (0x75fdc4e7 {USER32.DLL + 0x1c4e7})
그래서 RESULTS.TXT의 각 라인은 오프셋을 구문 분석하고 호출 할 수 있습니다 다음과 같은 모듈의 심볼 마크
:\>symquery.exe -f -e c:\Windows\System32\user32.dll -a +0x1c4e7
InternalCallWinProc+0x23
??:0
:\>symquery.exe -f -e c:\Windows\System32\user32.dll -a +0x1c5e7
UserCallWinProcCheckWow+0xb3
의 Result.txt과 손질 출력
:\>grep "^#" results.txt | sed s/".*<"//g
# 0 system call NtUserBuildPropList parameter #2
USER32.dll+0x649d9>)
snip
COMCTL32.dll+0x2f443>)
으로 통지의 Comctl32.dll에서 간단한 테스트 처리 예 (WinSxS에있는 기본 system32.dll에서 comctl.dll 여러 다른 사람이 당신 dll을로드 경로를 난 당신이 당신이 덤프를 디버깅하고있는 기호를 사용하기 전에 필요한 모든 기호를 당겨 할 의미합니까 이해
symquery.exe -f -e c:\Windows\winsxs\x86_microsoft.windows.common-
controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.dll -a +0x2f443
CallOriginalWndProc+0x1a
??:0
symquery.exe -f -e c:\Windows\system32\comctl32.dll -a +0x2f443
DrawInsert+0x120 <----- wrong symbol due to wrong module (late binding
/forwarded xxx yyy reasons)
확실하지를 볼 수 global.log처럼 다른 파일을 참조해야 오프라인 모드 (예인 경우) checkout symchk/om http s : //msdn.microsoft.com/en-us/library/windows/hardware/ff560061 (v = vs.85) .aspx – blabb
아니요. 프로세스가 중단되지 않았으며 모든 오류가 치명적이지 않았으므로 출력 로그에 스택 추적입니다. ** libeay32.dll + 0x1234 **에서 ** libeay32.dll로 이동하고 싶습니다! SSL_new_ctx [ssl/ssl3.cpp : 1234] **. – patraulea
일반적으로 기호는 로컬 캐시에 저장되므로 처음에는 느려야하며 일반적으로 상황이 빨라집니다. –