超硬核---从汇编角度带你了解函数(建议保存)

目录

1、我们将要解决的问题

2、寄存器

3、源代码展示

4、函数的调用关系(看汇编代码)

5、正片开始(危)


1、我们将要解决的问题

超硬核---从汇编角度带你了解函数(建议保存)_第1张图片

2、寄存器

首先给大家普及一下寄存器的类型,当然,并不详细讲解!

寄存器:

eax ebx ecx edx

ebp esp这两个寄存器中存放的是地址,这两个地址是用来维护栈帧的。

那么这两个寄存器是如何来维护栈帧的呢?

每一个函数的调用,都要在栈区创建一块空间。

3、源代码展示

超硬核---从汇编角度带你了解函数(建议保存)_第2张图片

4、函数的调用关系(看汇编代码)

在vs2013中,main()函数也是要被调用的,被__tmainCRTStartup调用,而这个函数,又被mainCRTStartup函数调用,关系如下图所示:

超硬核---从汇编角度带你了解函数(建议保存)_第3张图片

5、正片开始(危)

超硬核---从汇编角度带你了解函数(建议保存)_第4张图片

每当函数被调用的时候,ebp和esp两个寄存器就用来维护相应的栈帧空间,一个是栈底指针,一个是栈顶指针。

超硬核---从汇编角度带你了解函数(建议保存)_第5张图片

 

注意:ecx中保存的39h是rep stos这条指令执行的次数。

超硬核---从汇编角度带你了解函数(建议保存)_第6张图片

超硬核---从汇编角度带你了解函数(建议保存)_第7张图片

超硬核---从汇编角度带你了解函数(建议保存)_第8张图片

当然,今天并没有完全讲完,后面还有一小部分没有讲出,不过相信带大家了解到这个地方后,后面的大家也能根据前面的讲解,大致推导出后面汇编代码的意思,事实上,对于栈帧的开辟,大同小异,好了,今天的分享就到这了,觉得对你有所帮助的话,点一个小小的赞吧! 

你可能感兴趣的:(史上最强C语言,c语言,开发语言,c++)