一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

將成員函數(shù)作為回調(diào)函數(shù)

 SamBookshelf 2013-12-24
 在網(wǎng)上查了一些資料,做了一個Thunk模板,能夠正確調(diào)用成員函數(shù)。但是在做取成員函數(shù)地址操作時比較麻煩,需要用到匯編。
//取成員函數(shù)地址
DWORD_PTR off = 0;
_asm
{
   mov eax, Class::MemFunc
   mov DWORD PTR [off], eax
}
每指定一個成員函數(shù)作為一個回調(diào)函數(shù)就要做如上操作。本想將Class和MemFunc作為兩個參數(shù)定義一個宏包含匯編語言部分,
但不知道怎樣編寫匯編部分。如果有知道怎么編寫的,希望能不吝賜教^_^

// Thunk 具體實現(xiàn)
#pragma pack( push, 1 )
struct Thunk_struct
{
 BYTE  op_movecx;  // as operation "mov" in asm
 DWORD_PTR val_ecx;
 BYTE  op_call;  // as operation "jmp" in asm
 DWORD_PTR val_address;
};
#pragma pack( pop )

template < class TCallback, class TClass >
class Thunk
{
public:
 TCallback MemFuncToCallback( TClass* pObject, DWORD_PTR pMemFuncAddress )
 {
  // 0xB9是“mov ecx, 數(shù)值”的機器碼
  m_thunk.op_movecx = 0xB9;
  // 將對象指針pObject賦值給ecx
  m_thunk.val_ecx = (DWORD_PTR)pObject;
  // 0xE9是“jmp 相對地址”的機器碼
  m_thunk.op_call = 0xE9;
  // 利用成員函數(shù)的具體地址pMemFuncAddress計算jmp的相對地址
  m_thunk.val_address = pMemFuncAddress - ((DWORD_PTR)(&m_thunk.val_address) + sizeof(DWORD_PTR));

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩精品区欧美在线一区| 久久精品a毛片看国产成人| 国内外免费在线激情视频| 日韩三极片在线免费播放| 久久福利视频这里有精品| 欧美日韩成人在线一区| 乱女午夜精品一区二区三区| 在线日本不卡一区二区| 中文字幕中文字幕一区二区| 日本99精品在线观看| 久久国产成人精品国产成人亚洲| 久久夜色精品国产高清不卡| 黄色国产精品一区二区三区| 激情综合网俺也狠狠地| 偷拍偷窥女厕一区二区视频| 日本成人三级在线播放| 欧美亚洲三级视频在线观看| 欧美人与动牲交a精品| 日韩偷拍精品一区二区三区| 国产日产欧美精品视频| 国产盗摄精品一区二区视频| 男女午夜福利院在线观看| 日本一区二区三区久久娇喘| 日韩欧美中文字幕av| 亚洲一区二区三区熟女少妇| 日本人妻熟女一区二区三区| 日本不卡在线一区二区三区| 国产精品丝袜美腿一区二区| 精品国产一区二区欧美| 色哟哟在线免费一区二区三区| 中文字幕人妻av不卡| 国产日韩熟女中文字幕| 欧美成人黄色一区二区三区| 欧美日本道一区二区三区| 国产精品激情在线观看| 欧美人与动牲交a精品| 精品国产一区二区欧美| 天堂网中文字幕在线视频| 国产av天堂一区二区三区粉嫩| 日韩精品一区二区三区含羞含羞草| 日韩精品视频一二三区|