응용 프로그램을 실행하려고하는데 응용 프로그램이 액세스 위반으로 종료됩니다. 디버거에서 응용 프로그램을 실행하는 중 이것은 언로드 된 라이브러리 때문에 발생합니다. 응용 프로그램의 다음 릴리스가 나올 때까지 기다릴 수 없어 문제를 해결하려고합니다.메모리에 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에있는 문자열 대신 대상 프로세스의 일부 메모리에 대한 포인터 여야합니다. 다시 말하자면, 문자열을 내부에 저장하기 위해 메모리를 할당한다는 의미 일 것이므로 더 복잡해 질 수 있습니다.
당신이 왜 이것을하고 싶은지 추측하기가 어렵다면 버그를 숨길 수 있습니다. FreeLibrary()에서 중단 점을 설정하여 디버깅하거나 LoadLibrary()를 호출하여 버그를 무시하면 카운트가 증가합니다. –
대상에 메모리를 할당하려면'.dvalloc'을 사용하고 eza를 사용하여 할당 된 주소에 null로 끝나는 ASCII 문자열을 씁니다. –