直接呼叫類成員函式位址 (你不知道的事)

2021-06-05 17:31:14 字數 2010 閱讀 2644

void getmemberfuncaddr_vc6(dword& addr,fun f)

ut; ut._f = f;

addr = ut._t;

}//呼叫

dword dwaddrptr;getmemberfuncaddr_vc6(dwaddrptr, &cinstall_mfcdlg::continueexe );

//反彙編**release版

//函式首位址

00401570 $ 83ec 08 sub esp,0x8

00401573 . 53 push ebx

00401574 . 56 push esi

00401575 . 57 push edi

00401576 . 8d4424 10 lea eax,dword ptr ss:[esp+0x10]

0040157a . 68 70154000 push server.00401570 ; 入口位址

0040157f . 50 push eax

00401580 . 8bf9 mov edi,ecx

00401582 . e8 d9ffffff call server.00401560

//反彙編**debug版

//函式首位址

004e2f49 $ /e9 d2180100 jmp install_.cinstall_mfcdlg::continueexeafilelecontrolsit>(相比release版多了乙個jmp)

004f4820 > > \55 push ebp

004f4821 . 8bec mov ebp,esp

004f4823 . 81ec 98010000 sub esp,0x198

004f4829 . 53 push ebx

004f482a . 56 push esi

004f482b . 57 push edi

004f482c . 51 push ecx

004f482d . 8dbd 68feffff lea edi,dword ptr ss:[ebp-0x198]

004f4833 . b9 66000000 mov ecx,0x66

004f4838 . b8 cccccccc mov eax,0xcccccccc

004f483d . f3:ab rep stos dword ptr es:[edi]

004f483f . 59 pop ecx

004f4840 . 894d f8 mov dword ptr ss:[ebp-0x8],ecx

004f4843 . c745 ec 492f4>mov dword ptr ss:[ebp-0x14],install_.004e2f49 ; 入口位址

004f484a . c745 e0 00000>mov dword ptr ss:[ebp-0x20],0x0

004f4851 ? 68 492f4e00 push install_.004e2f49 (這個位址變了) ; 入口位址

004f4856 ? 8d45 d4 lea eax,dword ptr ss:[ebp-0x2c]

004f4859 ? 50 push eax

004f485a ? e8 9eecfeff call install_.004e34fd

Delphi 你不知道的函式

技術交流,dh講解.在sysutils.pas有幾個函式,以前我也沒有看見過,今天看原始碼的時候無意間發現了.function gdal longword type tdvclal array 0.3 of longword pdvclal tdvclal var p pointer a1,a2 l...

你所不知道的main()函式

我通常會把main函式定義成 void main 雖然這在vc等編譯器裡也能通過,但是這個是不對的。c 之父 bjarne stroustrup 在他的主頁上的 faq 中明確地寫著 the definition void main is not and never has been c nor h...

關於建構函式,也許你不知道的

首先看段 分析總結 為什麼使用1和2兩種不同的建構函式,執行的時間有那麼大的差距,2的執行時間差不多是1的兩倍 在我的機器上1的時間是313 2的時間是625 原來建構函式中蘊含了很多的奧秘 首先在建構函式中,在執行函式體之前 注意 還有很多隱藏的操作 如果有初始化列表,則先執行初始化列表,再進入執...