社区
汇编语言
帖子详情
请问这句话什么意思?“mov ecx, DWORD PTR _this$[ebp]”
wtller
2008-02-21 02:49:28
谢谢!
...全文
918
11
打赏
收藏
请问这句话什么意思?“mov ecx, DWORD PTR _this$[ebp]”
谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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]的形式访问类成员。
通过汇编代码看引用和指针的区别
mov
D
WORD
PTR
_pData$[
ebp
],
ecx
//指针变量也是存储data的地址 ; Line 23 addr = (int)&rData;
mov
edx, D
WORD
PTR
_rData$[
ebp
]
mov
D
WORD
PTR
_addr$[
ebp
], edx //取引用地址实际取的是data...
X86_Intel_汇编语法
EAX EBX
ECX
EDX - 通用寄存器 ; ESP - 堆栈指针,指向当前栈帧的栈顶(底地址) ;
EBP
- 基指针,指向当前栈帧的栈底(高地址) ; EIP - 指令指针,指向CPU要执行的下一条指令的地址 ; 标志寄存器 ; ZF - 零标志,...
MOV
EAX,D
WORD
PTR
SS:[
EBP
+8]
nasm来写可以写成
mov
eax,d
word
ptr
[
ebp
+ 8]理由:
ebp
和esp默认是ss段,所以根本不用显式说明。 eax,ebx,
ecx
,edx,edi,esi默认是ds段, eip默认是cs段。 补充:上面给的是masm用法nasm是
mov
eax,d
word
[
ebp
+ ...
C++ 反汇编:多维数组与指针
8B45 DC |
mov
eax,d
word
ptr
ss:[
ebp
-0x24] | 取出第一个数组元素的基址 0041141E | 8B4C85 E8 |
mov
ecx
,d
word
ptr
ss:[
ebp
+eax*4-0x18] | 一维数组寻址公式 00411422 | 51 | push
ecx
| 00411423 | 68 58584100 ...
mov
eax, d
word
ptr
[esi]指令区别
mov
eax,esi 将esi中的数据传送到eax中
mov
eax,[esi] ...
mov
eax, d
word
ptr
[esi] d
word
表示的是双字,四字节。esi中保存的是为内存中的地址。将该地址处的4字节数据传送到eax中。
汇编语言
21,458
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章