2012-08-14 2 views
4

우리가 사용하는 DLL과로드 된 위치를 기록하는 유닛 테스트에 로깅을 추가하고 싶습니다.프로세스에 의해로드 된 DLL 로깅

Sysinternals ListDLLs에서 필요한 정보를 얻을 수 있지만 테스트 프로세스가 실행되는 동안 실행해야합니다. 경쟁 조건이 끝날 것입니다. 예를 들어 ListDLL이 너무 일찍 실행될 수 있습니다. 테스트 실행을 통해 중간에로드 된 DLL을 놓치십시오. 또는 ListDLL은 테스트 프로세스가 종료 된 후 너무 늦게 실행될 수 있습니다.

마찬가지로 Visual Studio 디버거의 출력 및 모듈 창에서 필요한 정보를 얻을 수 있지만 빌드 서버에서이 정보를 자동화하고 싶습니다.

임의의 EXE를 실행하고, 사용하는 DLL을 추적하고, 정보를 파일에 기록 할 수있는 명령 줄 도구가 있습니까?

+0

아마도 도움이 될 것입니다. http://www.codeproject.com/Articles/301/Display-Loaded-Modules-v1-5 – Xearinox

+0

@Xearinox - 감사합니다. 이것은 ListDLL과 유사합니다. 프로세스가로드 될 때 프로세스의 DLL을 추적하고 프로세스가 존재할 때 보고서를 작성하는 명령 줄 도구가 필요합니다. –

답변

2

"디버깅"기능을 사용하는 도구를 직접 작성할 수 있습니다. 이 도구는

  1. 시작 새로운 프로세스는
  2. 은 내가 기억하는 한, 당신이 시스 인 터널이

http://msdn.microsoft.com/en-us/library/windows/desktop/ms679302(v=vs.85).aspx

+0

고마워요 @ Maximus - 나는 같은 줄을 따라 생각하고 있었고이 일을하는 내 도구를 썼습니다 : https://github.com/timrobinson/logdlls –

1

좋은 소식 : Detours를 사용하여 직접 작성하는 것이 그리 어렵지 않습니다. LoadLibraryA/W 함수를 후킹하고 실제 LoadLibrary가 반환하는 값에 대해 GetModuleFileName을 사용하여 DLL 이름을 파일에 기록합니다. 또한 자식 프로세스에 의해로드 된 DLL을 기록 할 수 있도록 CreateProcess를 연결하십시오.

나쁜 소식 : 내가 사용한 소스 코드를 게시하고 싶지만 공유 할 수없는 내부 도구입니다.

편집 : 필자는이 도구의 우회로가 완전히 신뢰할 만하다고 확신하지 않습니다. 테스트 중에 DLL 몇 개를 놓친 것 같습니다. 디버거 API를 사용하는 다른 도구는 다음과 같습니다. https://github.com/timrobinson/logdlls

+0

1. 우회로는 무료가 아닙니다. 2.이 제안은 정적 링크 라이브러리에서 실패합니다. – Maximus

0

주 LOAD_DLL_DEBUG_EVENT 필요 디버거로 생성 프로세스에

  • 프로세스 디버깅 이벤트를 첨부 중단해야한다 (현재 MSFT : http://technet.microsoft.com/en-US/sysinternals)에는 응용 프로그램을로드 할 때 발생하는 모든 종류의 이벤트를 추적하는 데 유용한 도구가 있습니다. 검사중인 응용 프로그램과 관련이없는 모든 것을 필터링해야합니다. 또한, Operation = "Load Image"필터를 설정할 수도 있습니다.

    Tried Tim Robinson의 도구이지만, Windows 관련 DLL 만 추적 할 수 있으므로 내 경우에는 유용하지 않습니다.

  • 관련 문제