请问这句话什么意思?“mov ecx, DWORD PTR _this$[ebp]”

wtller 2008-02-21 02:49:28
谢谢!
...全文
918 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
超度逗比 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wtller 的回复:]
请问,“ebp+XXX”,这个XXX是什么?_this$?好像太大了吧?
现在我已经知道大概意思了,是在操作ebp,只是俺想不通_this$+ebp偏移也太大了吧。
[/Quote]

在栈里,地址不大(高)才怪撒。
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
好像没那么简单,呵呵.
BMCRNET 2008-02-25
  • 打赏
  • 举报
回复
学习了!!!!!!!!!!
alan001 2008-02-23
  • 打赏
  • 举报
回复
this 就是运行中 类在内存中的指针
pig4210 2008-02-23
  • 打赏
  • 举报
回复
同意。
_this$其实是反汇编器给出的一个名称罢了,命名了一个局部变量。其实它可以叫arg0,arg1,叫XXX都一样。
反汇编器认为这个变量被当作一个this使用,那它就这么命名喽。当然,你人为地修改它的名称也可以。
就VC程序默认情况来说,this指针靠ecx传递进成员函数,因为ecx在函数体中可能需要使用而发生变化,所以一般在函数初始时就把ecx赋给一个局部变量(这个局部变量不是我们写程序时定义的,而是编译器定义的),那么这个局部变量在这个函数作用范围内就被当作this来用。
因为局部变量一般都用ebp来做基址。所以[ebp+XXX]便指向了某局部变量。
mov ecx, DWORD PTR _this$[ebp] 与mov ecx, DWORD PTR [ebp+_this$]等价,
如果你觉得_this$混淆了你的视觉,那你改成mov ecx, DWORD PTR [ebp+argX]好了。

另外,楼主用的什么反汇编器?我的IDA从来也不会识别出this指针来啊。。。从来都是我自己N命名。
cnzdgs 2008-02-22
  • 打赏
  • 举报
回复
“ebp+XXX”的意思是ebp加上一个数,这个数是编译器根据程序中函数的参数传递规则和函数的参数个数及次序来确定的。
例如void __cdecl TestClass::TestFunction(void),这个函数没有其它参数,只有一个this指针,那么这个xxx就应该是8。(ebp+0是原ebp,ebp+4是函数返回地址,ebp+8是第1参数)
rularys 2008-02-22
  • 打赏
  • 举报
回复
这个是反汇编出来的么?读一下反汇编器的帮助啊
wtller 2008-02-22
  • 打赏
  • 举报
回复
请问,“ebp+XXX”,这个XXX是什么?_this$?好像太大了吧?
现在我已经知道大概意思了,是在操作ebp,只是俺想不通_this$+ebp偏移也太大了吧。
cnzdgs 2008-02-21
  • 打赏
  • 举报
回复
_this$[ebp]和_this$这两种写法都可以,意思一样,编译出来都是[ebp+XXX]。ebp专门用来访问栈中的数据,访问参数用ebp+偏移量,访问局部变量用ebp-偏移量。
wtller 2008-02-21
  • 打赏
  • 举报
回复
谢谢LS!
我主要就是_this&[ebp]想不通。
如果_this&代表一个32bit的线性空间的逻辑地址,ebp是frame point,也是一个32bit的线性空间的逻辑地址。
那么_this&[ebp]是什么意思?用ebp来做index,来偏移_this$.....这也偏得太大了吧!!
cnzdgs 2008-02-21
  • 打赏
  • 举报
回复
函数中定义了_this$参数,这条指令的意思是把这个参数读到ecx里面。

这是一个类的成员函数,this是类的实例指针,指令的意思是将类的实例指针装入ecx。后面会使用[ecx+XXX]的形式访问类成员。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧