использование .lib из MASM в MS Visual Studio

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

  1. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    nabl3
    всё пипец!!! тему закрывать бред!!!
    Код (Text):
    1. cout << RtlInitUnicodeString << endl;
    у тебя он может быть немного другой, от системы зависит..
     
  2. nabl3

    nabl3 New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    17
    wsd, прости. Я поторопился. :dntknw:
    Она и правду импортируется, но оффсеты-то сохраняются...

    main.cpp:
    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <ntsecapi.h>
    4.  
    5. typedef NTSTATUS (NTAPI *PRTLINITSTRING) (
    6.     __out PUNICODE_STRING DestinationString,
    7.     __in_opt PCWSTR SourceString
    8. );
    9.  
    10. typedef BOOL (WINAPI *PENUMDEVICEDRIVERS) (
    11.     __out_bcount(cb) LPVOID *lpImageBase,
    12.     __in DWORD cb,
    13.     __out LPDWORD lpcbNeeded
    14. );
    15.  
    16. ULONG_PTR GetNTbase()
    17. {
    18.     LPVOID drivers[1024];  
    19.     PENUMDEVICEDRIVERS EnumDeviceDrivers = (PENUMDEVICEDRIVERS) GetProcAddress(LoadLibrary(L"psapi.dll"),"EnumDeviceDrivers"); 
    20.            EnumDeviceDrivers(drivers, sizeof(drivers), NULL);      
    21.     return (ULONG_PTR) drivers[0];
    22. }
    23.  
    24. void main()
    25. {
    26.     UNICODE_STRING U;
    27.  
    28.     HMODULE                hKernel;
    29.     ULONG_PTR              pRtlInitUnicodeString;
    30.     PRTLINITSTRING         imp_RtlInitUnicodeString;
    31.     PRTLINITSTRING         kernel_RtlInitUnicodeString;
    32.  
    33.     hKernel = LoadLibraryExA("ntkrnlpa.exe",0,1);
    34.     pRtlInitUnicodeString = (ULONG_PTR) GetProcAddress(hKernel,"RtlInitUnicodeString");
    35.    
    36.     imp_RtlInitUnicodeString = (PRTLINITSTRING) pRtlInitUnicodeString;
    37.  
    38.     pRtlInitUnicodeString -= (ULONG_PTR) hKernel;
    39.     pRtlInitUnicodeString += GetNTbase();
    40.     kernel_RtlInitUnicodeString = (PRTLINITSTRING) pRtlInitUnicodeString;
    41.        
    42.     printf("User-mode (imported) RtlInitUnicodeString: 0x%p\n",imp_RtlInitUnicodeString);  
    43.     imp_RtlInitUnicodeString(&U,L"blabla");
    44.     printf("Kernel-mode (nt!) RtlInitUnicodeString: 0x%p\n", kernel_RtlInitUnicodeString); 
    45.     kernel_RtlInitUnicodeString(&U,L"blabla"); // Access violation
    46. }
    Все, закрыл.