首页
社区
课程
招聘
献给汇编初学者-函数调用堆栈变化分析
发表于: 2007-1-19 19:20 139106

献给汇编初学者-函数调用堆栈变化分析

2007-1-19 19:20
139106
收藏
免费 8
支持
分享
最新回复 (231)
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
126
很好,很详细。
2008-11-6 12:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
127
牛B的人物就是强
2008-11-6 14:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
128
谢谢,虽然还看不明白。
2008-11-6 19:04
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
129
谢谢l了。。。现在没有太多的时间看。。。以后漫漫看
2008-11-6 19:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
130
谢谢共享~~
2008-11-6 22:24
0
雪    币: 1309
活跃值: (207)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
131
精品,永远都是精品,不会被淘汰。
谢谢。
2008-11-7 08:34
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
132
支持,

想弄个,编译好的文件,自己也动动手.
2008-11-7 15:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
133
完全不懂..我是新手中的新手.等学完了基础再来看这个.
2008-11-7 17:30
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
134
受益良多!谢谢分享!!!!
2008-11-7 17:32
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
135
learning……
2008-11-7 19:16
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
136
留个名字 以后来学
2009-1-22 17:36
0
雪    币: 200
活跃值: (525)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
137
这个是好东西,顶一下
2009-1-28 04:14
0
雪    币: 349
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
138
好文,支持楼主。
2009-1-28 20:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
139
门外汉还没有入门,勤学苦读中。
2009-1-28 21:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
140
受教了,谢谢楼主。
2009-1-29 22:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
141
谢谢楼主,学习了
2009-2-10 23:00
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
142
大大,我照你的32位汇编方法打,但是在dos里面没有反应的,不过那C++,我可以看到3101
我这么打得
ml /c /coff /Cp *.asm
link /subsystem:windows /libpath:c:\masm32\lib *.obj
2009-4-1 23:37
0
雪    币: 1685
活跃值: (709)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
143
好东西,支持一下.
2009-4-2 06:29
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
144
加密与解密 里面也有很详细的讲解
2009-4-2 09:21
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
145
楼主太好了,对照着看确实很容易看懂。
用VC6的debug编的时候,在主函数前面会出现下面一段话
push        ebp
mov        ebp, esp
sub        esp, 64                                        ; 00000040H
push        ebx
push        esi
push        edi
lea        edi, DWORD PTR [ebp-64]
mov        ecx, 16                                        ; 00000010H
        mov        eax, -858993460                                ; ccccccccH
        rep stosd
这是对于Debug版,调用后会调用call        __chkesp,判断是否发生函数调用约定的错误。
在主函数后面会有一段这个代码进行Chkesp
        pop        edi
        pop        esi
        pop        ebx
        add        esp, 64                                        ; 00000040H
        cmp        ebp, esp
        call        __chkesp
        mov        esp, ebp
        pop        ebp
        ret        0

如果chkesp不过的话会报以下msg
The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention

用Release编时就没有Chkesp了,因为优化掉了。
而且在vc6中编译的代码,因为vc6默认的调用方式是__cdecl ,参数从右到左,调用者负责清理参数占用的堆栈,所以在test函数中只是ret,而main函数负责清空栈,add        esp, 8。
2009-4-2 17:03
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
146
说的比较明白,,,,谢了
2009-5-6 20:47
0
雪    币: 685
活跃值: (535)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
147
受教
谢谢啦~
2009-5-7 12:05
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
148
讲的很详细。
2009-5-7 12:09
0
雪    币: 402
活跃值: (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
149
对这个现在正在思想之中了。太谢谢了!
2009-5-21 01:54
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
150
多谢楼主为我们这些新手带来那么好的基础教程
2009-5-21 02:21
0
游客
登录 | 注册 方可回帖
返回
//