Собственная GetModuleHandle без ассемблерных вставок (cpp)

Тема в разделе "WASM.WIN32", создана пользователем Rel, 6 апр 2010.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    diamond
    О, спасибо. Очень полезно почитать.
     
  2. Maclaud

    Maclaud New Member

    Публикаций:
    0
    Регистрация:
    15 май 2010
    Сообщения:
    7
    портую да delphi этот кусок:
    Код (Text):
    1.     while(1)
    2.     {
    3.         ldrmod  = (PLDR_MODULE)pointer;
    4.         dllname = ldrmod->BaseDllNameBuffer;
    5.         if(_wcsicmp(lpModuleName, dllname) == 0)
    6.         { return (HMODULE)ldrmod->BaseAddress; }
    7.         else { pointer = ldrmod->ModuleList.Flink; }
    8.         if(pointer == start) { break; }
    9.     }
    есть вопросы:

    1. ldrmod->BaseDllNameBuffer что за тип имеет? В LDR_MODULE_INFO вроде BaseDllName имеет UNICODE_STRING;
    а UNICODE_STRING имеет тип:
    typedef struct UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PWSTR Buffer;
    }

    в связи с этим непойму как работает _wcsicmp

    В общем проблема у меня по переводу if(_wcsicmp(lpModuleName, dllname) == 0) на delphi
     
  3. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    Maclaud
    Код (Text):
    1. dllname = ldrmod->BaseDllNameBuffer.Buffer
     
  4. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    В смысле
    Код (Text):
    1. dllname = ldrmod->BaseDllName.Buffer
     
  5. Maclaud

    Maclaud New Member

    Публикаций:
    0
    Регистрация:
    15 май 2010
    Сообщения:
    7
    так и подумал, просто смутило в msdn следующие:
     
  6. Maclaud

    Maclaud New Member

    Публикаций:
    0
    Регистрация:
    15 май 2010
    Сообщения:
    7
    покажите плиз структуру PLDR_MODULE
     
  7. 984259h

    984259h New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2007
    Сообщения:
    194
  8. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    впринципе никто не запрещает же по старинке? ;)

    char *s_code = "\x64\xA1\x30\x00\x00\x00\x8B\x40\x0C\x8B\x70\x1C\xAD\x8B\x40\x08\xC3";
    #pragma comment(linker,"/SECTION:.rdata,ERW")

    int _tmain(int argc, _TCHAR* argv[])
    {

    HMODULE(__stdcall *GetK32Base)();
    GetK32Base = (HMODULE(__stdcall*)())s_code;

    printf("kernel32 @%08X\n", GetK32Base());

    return 0;
    }