visual studio 2008反编译

前行 2011-06-12 06:59:27
想看看c++值传递和引用传递的汇编区别,但是vs2008只反编译了,函数体内的一些汇编代码,
00EF15E0 push ebp
00EF15E1 mov ebp,esp
00EF15E3 sub esp,0CCh
00EF15E9 push ebx
00EF15EA push esi
00EF15EB push edi
00EF15EC push ecx
00EF15ED lea edi,[ebp-0CCh]
00EF15F3 mov ecx,33h
00EF15F8 mov eax,0CCCCCCCCh
00EF15FD rep stos dword ptr es:[edi]
00EF15FF pop ecx
00EF1600 mov dword ptr [ebp-8],ecx
t= 200;
00EF1603 mov eax,dword ptr [t]
00EF1606 mov dword ptr [eax],0C8h //引用传
###########################################
00121530 push ebp
00121531 mov ebp,esp
00121533 sub esp,0CCh
00121539 push ebx
0012153A push esi
0012153B push edi
0012153C push ecx
0012153D lea edi,[ebp-0CCh]
00121543 mov ecx,33h
00121548 mov eax,0CCCCCCCCh
0012154D rep stos dword ptr es:[edi]
0012154F pop ecx
00121550 mov dword ptr [ebp-8],ecx
t=100;
00121553 mov dword ptr [t],64h //值传

我可以猜想值传递中[t]是直接存放的传入的值而,引用传中存放的是传入值的地址。
我想看一下在传入参数时和执行函数时全部的汇编代码,怎么看?
...全文
330 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
调用的时候多了个取地址操作
前行 2011-06-13
  • 打赏
  • 举报
回复
难道是函数调用时设置的?
qi.yinyong(i);
00F11B10 lea eax,[i]
00F11B13 push eax
00F11B14 lea ecx,[qi]
00F11B17 call Clazz<int>::yiyong (0F112C1h)
##############################
qi.zhichuan(i);
00F11B4C mov eax,dword ptr [i]
00F11B4F push eax
00F11B50 lea ecx,[qi]
00F11B53 call Clazz<int>::zhichuan (0F112B7h)

调用时是这样的!//(地址不用去理会,不是同一次调试的反汇编)
前行 2011-06-13
  • 打赏
  • 举报
回复
baidu了一下lea和mov的区别
例如,D1 dw 0x0000
汇编以后可能变成:
地址 值
0x9000 00
0x9001 00
那么lea SI,D1,SI的值是0x9000而不是0000,要用mov就是0000了
因此lea是把[i]的地址存储到eax中,而mov是把[i]的值存储到eax中。
这就是区别了吧
我接下来再看一下函数体内具体的操作
[Quote=引用 3 楼 fan199001 的回复:]
具体说一下可以不?不是都有个去地址操作吗?上面的是lea eax,[i]下面的是mov eax,dword ptr [i],区别是什么?

引用 2 楼 akirya 的回复:
调用的时候多了个取地址操作
[/Quote]
前行 2011-06-13
  • 打赏
  • 举报
回复
具体说一下可以不?不是都有个去地址操作吗?上面的是lea eax,[i]下面的是mov eax,dword ptr [i],区别是什么?
[Quote=引用 2 楼 akirya 的回复:]
调用的时候多了个取地址操作
[/Quote]

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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