实践除法函数的汇编代码的返回值

div函数有返回值的情况

先用Visual C++写一个C语言程序:

#include<stdio.h>

int div(int a , int b){
	return a/b;
}

int main(){
	int result = div(10,5);
	printf("test!\n");
	printf("%d\n",result);
	return 0;
}

用OD打开动态调试,找到div函数,0x5和0xA先后入栈然后调用div函数:
在这里插入图片描述

当div函数运行结束时,返回值由eax保存:
在这里插入图片描述

返回main函数之后,将返回值eax保存在本地变量[local.1]上:
在这里插入图片描述

之后输出的时候再把值从本地变量[local.1]上取出来给eax,然后eax入栈、%d\n入栈:
在这里插入图片描述

最后输出。

div函数没有返回值的情况

#include<stdio.h>

void div(int * a , int * b,int c){
	*a = *b / c;
}

int main(){
	int m = 2;
	int n = 8;
	int * a = &m;
	int * b = &n;
	div(a, b,2);
	printf("%d\n",*a);
	printf("test!\n");
	return 0;
}

先找到div函数,将变量[local.4]=0019FF38(地址上的值是00000008)放到edx入栈,将变量[local.3]=0019FF3C(地址上的值是00000002)放到eax入栈:
在这里插入图片描述

进入div函数,将参数2[arg.2](值为8)的值给eax,之后进行过除法idiv [arg.3],用eax的值去除以参数3[arg.3](值为2),结果4保存在eax中,之后将eax的值给参数1[arg.1]:
在这里插入图片描述

返回main函数之后,就是将变量[local.3]=19FF3C的值给ecx,再将ecx=19FF3C地址上的值4取出来给edx。
在这里插入图片描述

最后edx=00000004入栈,输出。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值