11.IDA-this指针
生活随笔
收集整理的這篇文章主要介紹了
11.IDA-this指针
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
所有非靜態C++成員函數都使用this指針。任何時候調用這樣一個函數,this都被初始化,指向用于調用該函數的對象.?
最好是把this看成是傳遞到所有非靜態成員函數的第一個隱藏參數.
this存放的地方
1.Visual C++利用thiscall調用約定,并將this傳遞到ECX寄存器中?
2.GNU g++編譯器則把this看做是函數的第一個(最左邊)參數,并在調用該函數之前將用于調用函數的對象的地址作為最后一項壓入棧中
從逆向工程的角度看,在調用函數之前,將一個地址轉移到ECX寄存器中可能意味著兩件事情?
1.該文件使用Visual C++編譯?
2.該函數是一個成員函數?
如果同一個地址被傳遞給兩個或更多函數,我們可以得到結論,這些函數全都屬于同一個類層次結構。?
如果發現一個函數向其他函數傳遞this指針,則這些函數可能和傳遞this的函數屬于同一個類
如下示例:
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
對應IDA反匯編如下:?
附:
構造函數并未指定返回類型,但由Visual C++生成的構造函數實際上把this指針存在EAX寄存器中并返回?
總結
以上是生活随笔為你收集整理的11.IDA-this指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20.IDA-修改二进制文件、显示修改点
- 下一篇: mov eax,dword ptr fs