天天看點

WTL之thunk

move esp+4, this,

jmp fun

隻不過先設定堆棧參數,然後跳轉函數

esp+4即為函數一個參數

(esp+8為第二個參數,esp-4為第一個局部變量)

為什麼要用thunk? this指針不是在視窗建立時作為extra data額外指定了嗎?

引用網上的一段解釋:這樣一來就有個緻命弱點,對視窗不能調用SetWindowLong(hWnd,GWL_USERDATA,資料),否則就會導緻程式崩潰。幸好這個函數(特定這幾個參數)是調用幾率極低的,對于視窗,由于建立視窗都是調用視窗類的Create函數,不用手工注冊WNDCLASS類,也就不會調用SetWindowLong函數。但是畢竟缺乏安全性,而且當一秒鐘内處理的視窗消息很多時,這種查找速度也可能不夠快。

繼續閱讀