盜竊虛表指標

2021-04-19 08:11:36 字數 605 閱讀 1891

今天,跟公司的人討論了乙個問題,感覺收益頗豐,故記錄下來,以備後用。

問題的大致跟虛表有關,這裡的問題主要是利用小技巧竊取虛表指標,達到另類的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...