欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    Win32程序入口

    我們都知道用C/C++語言寫一個程序,首先會寫一個main函數(shù)。同樣的在windows平臺寫一個win32應(yīng)用程序易語言取游戲窗口句柄,同樣有一個"main"函數(shù)作為入口。win32的main函數(shù)如下:

    int WINAPI WinMain( HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow
    );

    The WinMain is the name for the user- entry point for a Windows-based .

    參數(shù)說明:

    #define WINAPI __stdcall
    #define APIENTRY __stdcall
    #define APIENTRY    WINAPI

    WINAPI是個宏也是一種調(diào)用約定,也寫做,都是同一種壓棧方式即并且是函數(shù)內(nèi)部平衡棧。修飾的函數(shù),其參數(shù)都是從右向左通過堆棧傳遞,函數(shù)調(diào)用在返回前要由被調(diào)用函數(shù)平衡棧。類似的調(diào)用約定還有,cdecl等等。這個不是此次學(xué)習(xí)記錄的重點。

    第一個參數(shù):

    HINSTANCE hInstance;

    Handle to the current of the .

    當(dāng)前應(yīng)用的句柄,實際也是當(dāng)前應(yīng)用程序在內(nèi)存(4GB空間)運行時的偏移,即應(yīng)用程序的。這個參數(shù)非常重要易語言取游戲窗口句柄,就是我們逆向?qū)ふ移淙肟诤瘮?shù)的標(biāo)識。

    第二個參數(shù):

     HINSTANCE hPrevInstance,

    Handle to the of the . This is always NULL.

    這個參數(shù)不是很重要,通常為NULL,但可以用來設(shè)計只能運行一個實例的應(yīng)用程序。即互斥鎖。在后面的學(xué)習(xí)記錄會寫這個。

    第三個參數(shù)

    LPSTR lpCmdLine;

    Pointer to a null- string the command line for the , the program name. To the entire command line, use the .

    命令行參數(shù),即通過命令行向應(yīng)用程序傳參數(shù),并且不傳遞程序名稱。和C語言main函數(shù)參數(shù)很類似。

    int main(int argc,char *argv,char* envp[]);
    //argc 代表參數(shù)個數(shù),第一個為應(yīng)用程序名稱,第二個才是參數(shù)
    //argv 被傳遞的參數(shù)

    第四個參數(shù)

    int nCmdShow;

    how the window is to be shown. This can be one of the values.

    窗口的顯示方式,比如(正常顯示)和SW_HIDE(隱藏)等等,詳見MSDN

    在反匯編中定位入口

    上面說了很多,下面我們就在OD中尋找入口點。

    首先我們用OD打開自己寫的win32應(yīng)用程序:

    OD停到OEP(函數(shù)入口點)

    然后我們向下滑:

    看到了push了四個參數(shù),和我們的WinMain的參數(shù)一樣但是不是哪?我們在上文了解到winmain的對一個參數(shù)是個句柄,即應(yīng)用程序的。而箭頭所指的函數(shù)就是獲取應(yīng)用程序或dll的句柄。當(dāng)傳入?yún)?shù)為NULL時,返回當(dāng)前應(yīng)用進程的句柄。

    HMODULE WINAPI GetModuleHandle(
      __in_opt  LPCTSTR lpModuleName
    );

    If this is NULL, returns a handle to the file used to create the calling process (.exe file).

    感覺和winmain很相近了,但是還要判斷以下是否有寄存器傳參數(shù)。所以我們需要進入函數(shù)看看是否使用了有直接調(diào)用的寄存器。如果函數(shù)領(lǐng)空內(nèi)直接從寄存器里取值,并且沒有找到對該寄存器的命令,就可以認為是寄存器傳參數(shù)。

    選中call這行,點擊Enter,進入函數(shù)領(lǐng)空:

    進入前

    函數(shù)領(lǐng)空

    領(lǐng)空結(jié)束處

    在函數(shù)領(lǐng)空內(nèi),并沒有找到直接取寄存器的操作,并且在領(lǐng)空結(jié)束處可以看到ret 0x10。所以可以得出只有四個參數(shù)。所以call后面的地址就是WinMian函數(shù)。

    在反匯編中判斷函數(shù)是否WinMain的條件:

    1.四個參數(shù)

    2.參數(shù)從右向左壓棧,且是函數(shù)內(nèi)部平衡棧

    3.第一個參數(shù)為該應(yīng)用程序的句柄,即應(yīng)用程序的

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有