能力值:
( LV2,RANK:10 )
|
-
-
2 楼
"0040D784 ret 8; 这里的ret 8 相当于sub esp, 8; pop eip; jmp 函数返回地址,从这里面
也可以看出,该函数是内部平衡栈空间的,是stdcall 的调用方式"
有点小问题吧?
知道了个vc的编译特点。初涉的菜鸟学习啦
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
学习下.
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
什么问题, 能说一下吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
ret 立即数
是在返回时,平衡堆栈,堆栈向下增长。所以应该是add esp, 立即数 是吧?
另外应该是先pop eip,再对esp进行操作的吧?
我也不是很确定,因为我就是闲着没事看过一遍8086汇编,没实际写过。
|
能力值:
( LV7,RANK:100 )
|
-
-
6 楼
__cdecl 调用方式的add函数:
00401020 push ebp
00401021 mov ebp,esp
00401023 sub esp,40h
00401026 push ebx
00401027 push esi
00401028 push edi
00401029 lea edi,[ebp-40h]
0040102C mov ecx,10h
00401031 mov eax,0CCCCCCCCh
00401036 rep stos dword ptr [edi]
00401038 mov eax,dword ptr [ebp+8]
0040103B add eax,dword ptr [ebp+0Ch]
0040103E pop edi
0040103F pop esi
00401040 pop ebx
00401041 mov esp,ebp
00401043 pop ebp
00401044 ret
__stdcall 调用方式add函数:
00401020 push ebp
00401021 mov ebp,esp
00401023 sub esp,40h
00401026 push ebx
00401027 push esi
00401028 push edi
00401029 lea edi,[ebp-40h]
0040102C mov ecx,10h
00401031 mov eax,0CCCCCCCCh
00401036 rep stos dword ptr [edi]
00401038 mov eax,dword ptr [ebp+8]
0040103B add eax,dword ptr [ebp+0Ch]
0040103E pop edi
0040103F pop esi
00401040 pop ebx
00401041 mov esp,ebp
00401043 pop ebp
00401044 ret 8
这里比对一下, 除了最后一条指令不一样,其它都一样,
__cdecl栈外平衡, 所以, 直接ret
__stdcall栈内平衡, 所以ret 8
ret指令相当于:
pop eip
ret 8 指令相当于:
pop eip
add esp, 8
因为调用的时候, 先push参数的, 再push返回地址的:
push y
push x
push 返回地址
jmp add函数地址
对应的ret应该是完全相反的:
pop eip ; pop返回地址到eip
pop x
pop y
后面pop x; popy两条合成一条: add esp, 8
当然实际上pop eip指令是不对的, cpu不支持, 但是意思是这样的, ret指令的作用是这样的
|
能力值:
( LV7,RANK:100 )
|
-
-
7 楼
哦, 不好意思, 写错了, 的确是add esp, xxx , 我已经修改附件了。
栈是向下增长, push xxx相当于 sub esp, n
pop xxx 相当于 add esp, n
栈的向下增长, 这里面的“向下”意思是低地址方向, 从高地址到低地址。
高地址 FFFFFFFF
^
|
|
低地址 00000000
一般说“向下增长”画图像上面这么画。
有的书上的图是倒着画的:
低地址 00000000
|
|
\/
高地址 FFFFFFFF
这个是还说“向下增长”容易让人迷惑, 明明“向上”吗
所以, 以后我看书, 只要说“向下”我就认为是低地址, 这样就没有那么容易混淆了。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
pdf里面也有堆栈结构的图嘛
esp一改,再pop eip不就弹出来个参数呢?
|
能力值:
( LV7,RANK:100 )
|
-
-
9 楼
谢谢楼上指出问题, 我已经修改附件了。这个栈的push和pop对应的加还是减我总是搞错, 要是画图的话, 倒还好
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
学习了。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
看隨便看一遍就會啊、真厲害
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
学习了,谢谢楼主的分享啊!
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
下载了,谢谢楼主
|
能力值:
( LV3,RANK:30 )
|
-
-
14 楼
楼主厉害,学习中
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
顶下楼主,楼主辛苦,收藏了
|
能力值:
( LV6,RANK:90 )
|
-
-
16 楼
lz码字辛苦了,支持下。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
thanks!
|
能力值:
( LV4,RANK:50 )
|
-
-
18 楼
辛苦,支持!
|
能力值:
( LV2,RANK:140 )
|
-
-
19 楼
support!!
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
看了三次,网上查了一些资料,在汇编和C上功力又进一步。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
lz辛苦,向lz致敬
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
不错 ,支持
|
|
|