2012-12-29 3 views
0

dll에 양식이 포함 된 dll을 만들고 dll에 양식을 삽입하면됩니다. 하지만 문제는 내가 그것을 할 때, 내가 주사 한 과정, 붙어 있고 나는 그와 함께 지적 할 수 없다.dll 인젝션 용 Win32 형식

여기에 내가 한 것.

DWORD WINAPI MessageLoop(HINSTANCE hInstance) 
{ 
    hWindow = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DLGPROC(WindowProc)); 

    MSG Msg; 
    while(GetMessage(&Msg, 0, 0, 0)) 
    { 
     TranslateMessage(&Msg); 
     DispatchMessage(&Msg); 
    } 

    return 0; 
} 

및 주입 :

DWORD WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPSTR lpszReserved) 
{ 
    if(dwReason == DLL_PROCESS_ATTACH) 
    { 
     CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MessageLoop(hInstance), 0, 0, 0); 
    } 

    return 0; 
} 

@Remy Lebeau :

DWORD WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPSTR lpszReserved) 
{ 
    if(dwReason == DLL_PROCESS_ATTACH) 
    { 
     CreateThread(0, 0, &MessageLoop, hInstance, 0, 0); 
    } 

    return 0; 
} 

답변

3

CreateThread()에 대한 귀하의 전화가 잘못되었습니다. MessageLoop()의 주소를 전달하지 않고 실제로 MessageLoop() (으)로 전화하고 있습니다. 이 시도 :

DWORD WINAPI MessageLoop(LPVOID lpParameter) 
{ 
    HINSTANCE hInstance = (HINSTANCE) lpParameter; 
    ... 
} 

CreateThread(0, 0, &MessageLoop, hInstance, 0, 0); 

BTW, CreateThread()DllMain()에 전화를 안전하지 않습니다. 이것은 다양한 MSDN 설명서에 분명하게 명시되어 있습니다. DLL을 내부적으로 CreateThread()을 호출하는 별도의 함수로 내보내는 등 DllMain() 밖으로 이동 한 다음 DLL이 메모리에로드 된 후 내 보낸 코드가 호출 된 함수를 호출하게해야합니다.

+0

이제 dll을 주입 할 때 프로세스가 중단됩니다. 아마도 당신이 CreateThread()라고 말한 것 같습니다. 어떤 생각을 어떻게 다른 기능과 함께 사용할 수 있습니까? – Idohadar

+1

어떻게 시작하면 DLL을 주입합니까? 당신이'DllMain()'에서'CreateThread()'를 옮겼습니까? –

+0

void 함수를 사용해야합니까? 또는 무엇을 ? – Idohadar