今天,跟公司的人討論了乙個問題,感覺收益頗豐,故記錄下來,以備後用。
問題的大致跟虛表有關,這裡的問題主要是利用小技巧竊取虛表指標,達到另類的hook。
#include "stdafx.h"
#include
using namespace std;
class a
private:
int x;
};class b : public a
private:
int y;
};class c
};int main(int argc, char* argv)
以上的類a,
b, c;經過
memcpy後,b
將自己的
vptr
指標拷貝到了物件
a,c的結構中,於是出現了輸出:
b::f
b::f
的現象。
由此我們可以想象,假設我們有某個
dll和標頭檔案,我們就可以利用這裡的機制,來
hook
自己的成員函式了。為了防止執行時的錯誤,我們可以引出如下假設。
if(sizeof(c)<=sizeof(b))
虛表 虛指標
虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 cpp view plain copy class a class b public a a,b的實現省略 因...
虛函式,虛表,虛表指標
分享一篇文章,詳細解釋了為什麼通過基類指標指向基類物件或派生類物件,就可以呼叫相應類的虛函式。自 一 概述 為了實現c 的多型,c 使用了一種動態繫結的技術。這個技術的核心是虛函式表 下文簡稱虛表 本文介紹虛函式表是如何實現動態繫結的。二 類的虛表 每個包含了虛函式的類都包含乙個虛表。我們知道,當乙...
虛表指標和虛表
父類中有虛函式,父類繼承子類後 1 有各自的虛表指標和虛表 2 對於子類中未被重寫的虛函式,在父子類各自虛表中儲存的函式位址都是父類中的虛函式位址 3 對於子類中被重寫的虛函式,在父子類各自的虛表中儲存的函式位址是不同的 exp1 無覆蓋時 include using namespace std c...