re的学习记录从入门到入狱【4】

C语言基础

简单的代码
程序开始执行的时候,就是从入口程序开始执行。

void main()//入口
{
	return;//结束
}

构建(F7),并且运行(F5)程序

void main()//开始执行
{
	__asm
	{
		mov eax,eax
		mov ecx,ecx
		mov edx,edx
	}
	return;//执行结束
}

现在什么都没有写,这程序是空的。但是学过汇编,所以可以在花括号内插入必须要用__asm开头,告诉编译器,我们这写的是汇编代码,如果直接写mov或者add等,编译器是无法识别。
按F5黑框一闪而过,因为插入的汇编代码也是无用代码,花指令,程序还是空的。
解程序的运行本质就看他的汇编代码
利用F9设置一个断点
在这里插入图片描述
程序断了下来
在这里插入图片描述
查看汇编代码
在这里插入图片描述
我们的__asm上面和return下面的代码,都是编译器帮我们生成的函数
这里单步快捷键是F10。F10到代码的最后一句ret,也就是程序结束的地方,
最后跑过ret指令后,Shift + F5结束调试。
体验C语言的函数
函数:一系列指令的集合,为了重复使用调用
在C语言中,他是如下格式调用

	函数类型 函数名(参数)
	{
		程序执行代码;
	}
(1)函数类型、函数名,不可省略,参数可以省略(不必要/不重要的参数)
(2)函数名、参数名,只能以字母、数字、下划线组成,且第一个字母必须是字母或者下划线
(3)区分大小写,不可使用关键字
列:
	int wdnmd(int a,int b)
	{
		return 0;
	}

那么,这样一个简单的函数就写完了!
现在要去调用它!
在汇编格式是这样的:

	push 1	//传参
	push 2	//传参
	call 内存地址	//CALL到函数

而在C语言中是这样的:

	wdnmd(参数);
	//用例子就是:
	wdnmd(1,2); //这样就是把1和2传入

实际操作:

int wdnmd(int a,int b)  //自定义的函数wdnmd
{
	return 0;
}
void main() //程序入口,开始执行的地方
{
	wdnmd(5,5);   //调用函数
	return; //执行结束
}

现在如果要在9行出设置一个断点
在这里插入图片描述
查看汇编代码 F10步过,在CALLF11步入进入函数
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值