2013-10-27 3 views
5

QtCreator IDE를 사용하여 mingw로 컴파일 된 비 Qt C DLL을 작성했습니다.QtCreator를 사용하여 DLL 프로젝트를 디버깅하는 방법은 무엇입니까?

DLL을 프로세스에 삽입하면 DLL로 인해 프로세스가 특정 코드 줄에서 충돌합니다. 나는이 라인이 OutputDebugString의 사용을 통해 범인임을 알게되었습니다. 줄을 수정하는 방법을 알고 그 줄을 수정할 때 DLL이 작동합니다. 그러나 디버거를 사용하는 방법을 배우기 위해 필자는 줄을 깨뜨리고 수정하지 않았습니다.

QtCreator 디버거를 사용하여 똑같은 정확한 라인이 문제의 원인인지 찾는 방법은 무엇입니까?

enter image description here

+1

문제를 재현하고 디버거에서 실행하는 라이브러리에 링크 된 작은 프로그램을 작성하십시오. 아니면 "주사"로 정확히 무엇을 의미합니까? –

+0

@FrankOsterfeld : http://en.wikipedia.org/wiki/DLL_injection 희생 된 procces의 메모리를 편집하는 하위 수준 DLL 파일입니다. DLL 삽입 작업 방식 때문에 라이브러리와 연결할 수 없습니다. 다른 프로세스의 메모리를 편집하는 이유는 무엇입니까? Assault Cube라는 오픈 소스 프로젝트의 메모리를 편집하고 있습니다. 이 목적은 C 코드가 ASM으로 변환되는 방법과 컴퓨터가 저수준에서 어떻게 작동하는지에 대해 탐구하고 배우는 것입니다. – user2924308

+1

음, 위의 창에서 dll과 인수를 사용하는 실행 파일 이름을 입력하면 QtCreator가 나머지 작업을 수행합니다. – Lol4t0

답변

3

솔루션은 DLL을 주입하기 전에 실행 파일에 첨부 된 디버거를 실행하는 것입니다 : QtCreator은 더 EXE가 없기 때문에 다음과 같은 대화 상자에서 F5 결과를 눌러 디버그 모드에서 컴파일로 설정됩니다. DLL은 디버그 구성으로 빌드해야하며 해당 프로젝트를 열어야합니다. 지침 here을 사용하여 디버거를 연결하고 DLL을 주입하십시오. 실행 가능한 충돌이 발생하면 선택한 스택 프레임을 클릭 할 때 스택 추적과 DLL 코드가 표시됩니다. 그러나주의 : 프로세스의 메모리를 손상 시키면 스택 추적이 불완전하거나 올바르지 않을 수 있습니다.

+0

굉장! 나는 이것이 가능하지 않다는 것을 거의 확신했다. – user2924308

+0

@ user2924308 내 대답이 도움이된다면 동의하십시오. – Nazar554

관련 문제