11.IDA-this指针
所有非靜態(tài)C++成員函數(shù)都使用this指針。任何時(shí)候調(diào)用這樣一個(gè)函數(shù),this都被初始化,指向用于調(diào)用該函數(shù)的對(duì)象.?
最好是把this看成是傳遞到所有非靜態(tài)成員函數(shù)的第一個(gè)隱藏參數(shù).
this存放的地方
1.Visual C++利用thiscall調(diào)用約定,并將this傳遞到ECX寄存器中?
2.GNU g++編譯器則把this看做是函數(shù)的第一個(gè)(最左邊)參數(shù),并在調(diào)用該函數(shù)之前將用于調(diào)用函數(shù)的對(duì)象的地址作為最后一項(xiàng)壓入棧中
從逆向工程的角度看,在調(diào)用函數(shù)之前,將一個(gè)地址轉(zhuǎn)移到ECX寄存器中可能意味著兩件事情?
1.該文件使用Visual C++編譯?
2.該函數(shù)是一個(gè)成員函數(shù)?
如果同一個(gè)地址被傳遞給兩個(gè)或更多函數(shù),我們可以得到結(jié)論,這些函數(shù)全都屬于同一個(gè)類層次結(jié)構(gòu)。?
如果發(fā)現(xiàn)一個(gè)函數(shù)向其他函數(shù)傳遞this指針,則這些函數(shù)可能和傳遞this的函數(shù)屬于同一個(gè)類
如下示例:
class A { public:int fun(){return 1;}int Lk(){return fun();} }; int _tmain(int argc, _TCHAR* argv[]) {A a;a.Lk();return 0; }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
對(duì)應(yīng)IDA反匯編如下:?
附:
構(gòu)造函數(shù)并未指定返回類型,但由Visual C++生成的構(gòu)造函數(shù)實(shí)際上把this指針存在EAX寄存器中并返回?
總結(jié)
以上是生活随笔為你收集整理的11.IDA-this指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20.IDA-修改二进制文件、显示修改点
- 下一篇: mov eax,dword ptr fs