| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1336 人关注过本帖
标题:理解调用子程序入栈方式
只看楼主 加入收藏
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
结帖率:54.55%
收藏
已结贴  问题点数:20 回复次数:2 
理解调用子程序入栈方式
先说不带参数。直接局部变量存取的说明[对比书的举例]
程序代码:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data
.code
odtest proc
     local @a:BYTE   ;这里是一个字节 8位
     local @aa:DWORD ;双字 四个字节
     local @aaa ;双字四个字节    ;注:32位默认是双字对齐的,这时存取最快
    
     mov al,@a
     mov eax,@aa
     mov eax,@aaa
    ret
odtest endp
start:
 call odtest
 invoke ExitProcess,NULL
end start
上面的反汇编代码
程序代码:
00401000  /$  55            push    ebp
00401001  |.  8BEC          mov     ebp, esp
00401003  |.  83C4 F4       add     esp, -0C
00401006  |.  8A45 FF       mov     al, byte ptr [ebp-1]
00401009  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
0040100C  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
0040100F  |.  C9            leave
00401010  \.  C3            retn
00401011 >/$  E8 EAFFFFFF   call    00401000  ;程序入口在这里 call上面的地址
00401016  |.  6A 00         push    0                                ; /ExitCode = 0
00401018  \.  E8 01000000   call    <jmp.&kernel32.ExitProcess>      ; \ExitProcess
0040101D      CC            int3
0040101E   .- FF25 00204000 jmp     dword ptr [<&kernel32.ExitProces>;  kernel32.ExitProcess

||
||
||
||

搜索更多相关主题的帖子: 子程序 
2009-09-08 16:12
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:10 
不明白你想说甚莫?上面代码没有问题啊。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-09-09 08:51
非虫
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:99
专家分:171
注 册:2008-10-4
收藏
得分:10 
他的意思是为什么要分配0ch的空间吧,不要忘了,汇编传参数都是DWORD的!就算是BYTE也要分配一个DWORD,也是为了字节对齐。
2009-09-14 11:01
快速回复:理解调用子程序入栈方式
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011913 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved