首页
社区
课程
招聘
[旧帖] [求助]i++和++i的反汇编 0.00雪花
发表于: 2009-1-29 15:06 8996

[旧帖] [求助]i++和++i的反汇编 0.00雪花

2009-1-29 15:06
8996
收藏
免费 1
支持
分享
最新回复 (33)
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
[QUOTE=君君寒;571097]http://www.chinaaspx.com/archive/vc/8703.htm

对const声明变量的奇异行为的探讨

  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]  
对const声明变量的奇异行为的探讨

Ar...[/QUOTE]
大哥,此ECX非彼ECX。
此ECX被当作循环计数用,LZ的ECX只是当作一个基本的变量用。。。
很明显不同。。。。。。

转君君寒转帖的时候得看看情况吧
2009-1-30 21:03
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
[QUOTE=君君寒;571097]http://www.chinaaspx.com/archive/vc/8703.htm

对const声明变量的奇异行为的探讨
\\ 第六步,给段寄存器预先赋值:

0040125C   mov         ecx,12h

\\ ECX寄存器是段寄存器的一种,为计数器 SS 堆栈段。设为12h。

00401261   mov         eax,0CCCCCCCCh

\\ EAX寄存器是段寄存器的一种,为累加器 CS 代码段;设为0CCCCCCCCh。

00401266   rep stos    dword ptr [edi]

\\ 这句话是干吗的?
[/QUOTE]

我来给你解释,这段代码是把刚在堆栈中分配的空间填充为0xcc,也就是int3的。

eax=要填充的字节
ecx=循环的次数
rep stos [edi]
完成这个填充。

由此可见,此处ECX仅仅作为循环的计数用,和LZ说的ECX完全不是一回事。。。。

君君寒转帖要看贴啊,不要乱转
2009-1-30 21:10
0
雪    币: 200
活跃值: (245)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
不懂啊,
冒泡啊。。。
2009-1-30 21:12
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
29
那文章越后面越天才
最后面已经是无敌了
2009-1-30 21:17
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
00401250   push        ebp
00401251   mov         ebp,esp//这两步用的着解释吗

00401253   sub         esp,48h//分配0x48字节,一共0x12=18个DWORD

00401256   push        ebx
00401257   push        esi
00401258   push        edi//这三句也不用解释

00401259   lea         edi,[ebp-48h]
0040125C   mov         ecx,12h
00401261   mov         eax,0CCCCCCCCh
00401266   rep stos    dword ptr [edi]//数据填充0xcc int3

00401268   mov         dword ptr [ebp-4], 2710h//不解释

0040126F   mov         dword ptr [ebp-8],0
00401276   lea         eax,[ebp-4]
00401279   mov         dword ptr [ebp-8],eax//给指针赋值

0040127C   mov         ecx,dword ptr [ebp-8]
0040127F   mov         dword ptr [ecx],0Ah//不解释

00401285   push        2710h
0040128A   push        offset string "%d\n" (0042f01c)
0040128F   call        printf (004082f0)
00401294   add         esp,8//不解释

00401297   mov         edx,dword ptr [ebp-8]
0040129A   mov         eax,dword ptr [edx]
0040129C   push        eax
0040129D   push        offset string "%d\n" (0042f01c)
004012A2   call        printf (004082f0)
004012A7   add         esp,8//不解释,自己看源码

004012AA   xor         eax,eax//eax=0

004012AC   pop         edi
004012AD   pop         esi
004012AE   pop         ebx//用不着解释

004012AF   add         esp,48h//不解释

004012B2   cmp         ebp,esp
004012B4   call        __chkesp (00408190)//不解释

004012B9   mov         esp,ebp//恢复esp

004012BB   pop         ebp//恢复ebp

004012BC   ret//返回
2009-1-30 21:20
0
雪    币: 6092
活跃值: (654)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
31
。。。。没仔细看。转了下别人的大作,被众人虐了。闪人。我知道错了。。。。
2009-1-30 21:20
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
强烈同意,写那文章的淫完全是瓜的
2009-1-30 21:22
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
[QUOTE=unnamed;-1]
这样,当全局声明const变量时,我们企图将一个DWORD值写入一个0CCCCCCCCh指向的未分配的内存中,所以遭遇到访问禁止!!
而局部声明const变量时,是将一个DWORD值写入一个00000012h指向的内存中,这是可以的!!
[/QUOTE]

特别是这句,完全就是本着不懂装懂的精神来的。
2009-1-30 21:24
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
高级语言不就是这样

忍忍吧

反正我看不出有什么区别
2009-1-31 07:33
0
游客
登录 | 注册 方可回帖
返回
//