首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
付费问答
发新帖
0
0
[旧帖]
[求助]过程参数和堆栈参数的关系
0.00雪花
发表于: 2010-5-4 13:31
1639
[旧帖]
[求助]过程参数和堆栈参数的关系
0.00雪花
younghust
2010-5-4 13:31
1639
C语言程序调用汇编过程,并向其传送参数
test.c
:
#include<stdio.h>
extern int __stdcall myadd(int x, int y);
int main(void)
{
int a=1, b=2,c=0;
c=myadd(a,b);
printf("c=%d\n", c);
return 0;
}
1. 通过
过程参数
获得输入参数
myadd.asm
TITLE get the sum of the two numbers
.386
.MODEL FLAT, STDCALL
OPTION CASEMAP:NONE
.CODE
myadd PROC x:DWORD, y:DWORD
MOV EAX, x
ADD EAX, y
RET
myadd ENDP
END
2. 通过
堆栈
获得输入参数
TITLE get the sum of the two numbers
.386
.MODEL FLAT, STDCALL
OPTION CASEMAP:NONE
.CODE
myadd PROC USES ESI EDI x:DWORD, y:DWORD
MOV EAX, [EBP+8]
ADD EAX, [EBP+12]
RET
myadd ENDP
END
两种方法都对,但x与[EBP+8] , y与[EBP+12], 是什么关系?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
5
)
GUX
雪 币:
268
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
139
粉丝
0
关注
私信
GUX
2
楼
只分析2这种情况
2里面这个uses esi edi 表示要编译器自动插入保存及恢复这些寄存器的指令
翻译成完整的汇编代码就是
myadd proc x , y
push ebp
mov ebp, esp
push esi
push edi
.......
pop edi
pop esi
leave
ret
myadd endp
程序调用myadd的时候
push y
push x
call myadd ; 这一句程序需要把返回地址压栈
所以[ebp+4]是返回地址
[ebp+8]是x
[ebp+12]是y
2010-5-4 15:13
0
younghust
雪 币:
76
活跃值:
(25)
能力值:
( LV3,RANK:20 )
在线值:
发帖
4
回帖
55
粉丝
0
关注
私信
younghust
3
楼
你分析得我也明白,我就是不懂:过程名后的参数和堆栈参数什么关系?如果等价的话,为什么要有两种呢?
2010-5-4 15:48
0
GUX
雪 币:
268
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
139
粉丝
0
关注
私信
GUX
4
楼
等价啊, 你把1用调试器反汇编看看就知道, 跟2其实是一样的
1是汇编编辑器中的写法, x,y只是助记符,经过汇编编译器编译后的代码, 其实就是2这样的
2010-5-4 16:38
0
地狱魔龙
雪 币:
51
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
9
粉丝
0
关注
私信
地狱魔龙
5
楼
为什么这些我老是不懂、、、、、、、
2010-5-4 16:42
0
younghust
雪 币:
76
活跃值:
(25)
能力值:
( LV3,RANK:20 )
在线值:
发帖
4
回帖
55
粉丝
0
关注
私信
younghust
6
楼
嗯。就是C程序将参数传入到汇编的过程后,我不知道是操作输入参数好,还是堆栈参数好了。其实它们是一样的,都能获得输入参数。
谢谢大家了。
2010-5-4 17:33
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
younghust
4
发帖
55
回帖
20
RANK
关注
私信
他的文章
[求助]过程参数和堆栈参数的关系
1640
[原创]C程序使用不同函数调用约定调用汇编子过程
2486
实参入栈过程[求助]
1461
[求助]C 语言调用汇编模块链接错误
1381
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部