能力值:
( LV3,RANK:30 )
|
-
-
2 楼
没看明白主题,没逆向经验,this是每个非static得成员函数的第一个参数,隐含的
而this是对象本身吧
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
this不是非static函数的最后一个参数吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
0104B764是cex,
在内存的表达是这样的
0104B764 3C 8E A8 00 00 00 01 00 00 00 00 00 01 00 00 00 <帹...........
0104B774 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0104B784 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0104B794 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0104B7A4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0104B7B4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0104B7C4 00 00 00 00 54 F1 07 00 00 00 00 00 00 00 2D 4E ....T?.......-N
前4个字节是,指向类函数的指针。下面则是这个this指向的数据变量
|
能力值:
( LV3,RANK:30 )
|
-
-
5 楼
看源码的时候幻想是第一个参数。。。在运行时最后一个入栈。。。我没说好
|
能力值:
( LV6,RANK:93 )
|
-
-
6 楼
暴搜内存?以上面为例:搜索3C 8E A8 00也就是0X00A88E3C
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
看不懂,不过还是要顶一下LZ
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
解决了,才发现很简单,先偏移算出函数地址,虚构函数表有个地址,搜索这个函数的地址,偏移上去,得到指针头地址,然后搜索指针头,就能找到函数对应的this指针
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
stdcall之类的那些东西,没研究过。函数参数的压栈顺序
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
没太看明白。。。c++菜鸟路过
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
this指针是类成员函数的隐含参数。
如果是VC编译的话,this指针放在ecx中,你可以从某个类成员函数的ecx寄存器中得到这个this指针,其实就是指向当前类实例的地址。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
楼主问的是什么没看明白。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
this 指向非静态对象
|
能力值:
( LV6,RANK:90 )
|
-
-
14 楼
你可以看this指针的函数调用,一般是ecx传递参数
|
能力值:
( LV3,RANK:30 )
|
-
-
15 楼
ecx寄存器传递
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
this应该是被当作参数传递的。第一个参数
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
你可以通过修改调用约定为stdcall让this指针入栈,默认情况下通过寄存器传参
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
两个对象去调用各自的方法fun默认传了一个this指针,用来区分不同对象的调用,
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
在VC下,对于大多数情况,即用THISCALL的情况,识别THIS的关键是在函数调用过程中用ecx作为第一个参数,并且在ECX中保存了对象的首地址,换句话说,要在代码内看到这个ECX参与的寄存器相对间接访问方式,用STDCALL时,THIS指针用堆栈方式,比较难看出来,但这种情况很少
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
没看懂!
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
唉 不懂 顶一下吧。
好好学习。
|
|
|