2014-07-04 5 views
2

응용 프로그램을 실행하려고하는데 응용 프로그램이 액세스 위반으로 종료됩니다. 디버거에서 응용 프로그램을 실행하는 중 이것은 언로드 된 라이브러리 때문에 발생합니다. 응용 프로그램의 다음 릴리스가 나올 때까지 기다릴 수 없어 문제를 해결하려고합니다.메모리에 DLL 고정 (참조 횟수 늘리기)

WinDbg가 C++ LoadLibrary() 호출과 마찬가지로로드 된 모듈의 참조 횟수를 늘리는 방법을 제공하는지 궁금합니다. 그런 다음 모듈로드를 중단하고 영향을받는 DLL에서 참조 횟수를 늘려 응용 프로그램을 사용할 수 있는지 확인할 수 있습니다.

는 이미 .load, !load, .lock, !lock, .mod 및 WinDbg는 도움말의 !mod로 시작하는 명령에 대해 보았다. .load는 DLL을 대상 프로세스가 아닌 디버거 프로세스의 확장으로로드합니다.

업데이트 내가 어떤 소스 코드가없는 것을 언급하는 것을 잊었다, 그래서 나는 간단히 해결 등을 LoadLibrary() 호출을 구현하고 컴파일 할 수 없다.

한스 옆모습에 의해 코멘트 .call 날 리드와 나는

.call /v kernel32!LoadLibraryA("....dll") 

처럼 사용하려고하지만 '.call/V의 KERNEL32에 오류 메시지

기호되지에게 기능을 제공합니다 ! LoadLibraryA ("... DLL") '

업데이트 2

.call에있는 파일 이름의 문자열은 명령을 입력하는 WinDbg.exe에있는 문자열 대신 대상 프로세스의 일부 메모리에 대한 포인터 여야합니다. 다시 말하자면, 문자열을 내부에 저장하기 위해 메모리를 할당한다는 의미 일 것이므로 더 복잡해 질 수 있습니다.

+1

당신이 왜 이것을하고 싶은지 추측하기가 어렵다면 버그를 숨길 수 있습니다. FreeLibrary()에서 중단 점을 설정하여 디버깅하거나 LoadLibrary()를 호출하여 버그를 무시하면 카운트가 증가합니다. –

+0

대상에 메모리를 할당하려면'.dvalloc'을 사용하고 eza를 사용하여 할당 된 주소에 null로 끝나는 ASCII 문자열을 씁니다. –

답변