помогите с detours

Тема в разделе "WASM.BEGINNERS", создана пользователем toto, 3 сен 2008.

  1. toto

    toto New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2008
    Сообщения:
    36
    Привет всем!
    Начал разбираться с detours возникла проблема
    есть длл:
    Код (Text):
    1. #include <windows.h>
    2. #include "detours.h"
    3.  
    4. #pragma comment(linker,"/MERGE:.rdata=.text")
    5. #pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
    6.  
    7. int ( WINAPI *REAL_MessageBoxA)( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType ) = 0;
    8.  
    9.  
    10. int HOOK_MessageBoxA( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType )
    11. {
    12.     return REAL_MessageBoxA( hWnd, "hook", "hook", uType );
    13. }
    14.  
    15. BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
    16. {
    17.    DetourFunction( (PBYTE)DetourFindFunction("user32.dll", "MessageBoxA"), (PBYTE)HOOK_MessageBoxA );
    18.    __asm mov [REAL_MessageBoxA], eax
    19.    return true;
    20. }
    и экзешник
    Код (Text):
    1. #include <windows.h>
    2.  
    3. #pragma comment(linker,"/MERGE:.rdata=.text")
    4. #pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
    5. #pragma comment(linker,"/ENTRY:New_WinMain")
    6. #pragma comment(linker,"/NODEFAULTLIB")
    7.  
    8. int New_WinMain()
    9. {
    10.     LoadLibrary("test.dll");
    11.     MessageBoxA( 0, "real", "real", 0 );
    12.     return 0;
    13. }
    мессаджбокс хукается выводит "hook", но патом приложение падает "dd.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства."
    в асме я не силен, пробовал прогнать через оли, ниче не понял :))
    после инструкции retn, программа останавливается и оли выводит еррор "что память по адресу 00000000 не читаемая. Изменить eip или pass exception to program".
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    У вас HOOK_MessageBoxA не stdcall-ьный. Возвращается по адресу hWnd
     
  3. toto

    toto New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2008
    Сообщения:
    36
    ха :)
    огромное спасибо вам _basmp_