汇编之函数

Posted codexlx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编之函数相关的知识,希望对你有一定的参考价值。

1.函数:

函数就是一系列指令的集合,为了完成某个会重复使用的特定功能。

  比如:MOV EAX,1 MOV ECX,1 就相当于一个函数(指令的集合)

2.函数的调用:

(1)使用JMP来执行函数

  使用JMP执行函数的话,JMP跳转到相应的指令后指令指针不再返回到原来位置的下一位:

(2)使用CALL来执行函数

  以四条指令向普通寄存器存储值为例:

CALL执行前:

  技术图片

 

CALL执行后(F8):

  技术图片

 

   可以看到CALL指令把当前指令的下一条指令推入栈中,在执行完四条指令后,RETN回到了当前指令的下一条指令。执行顺序并没有改变。

 

3.参数、返回值

汇编中EAX通常用来存储函数的返回值的。

实现一个简单的加法函数:

方法如下:

  技术图片

 

 (1)定义三条指令:

  • 将ECX,EDX中的值相加;(参数)
  • 将相加的值放到EAX中;
  • 返回

(2)调用函数:

  • 先向ECX,EDX中存入要加的两个数;
  • 使用CALL调用对应方法;

F8逐步执行结果:

  技术图片

 

 EAX中存储的就是相加的结果

 

以上是关于汇编之函数的主要内容,如果未能解决你的问题,请参考以下文章

图解C/C++语言底层:函数调用过程之函数栈帧的创建和销毁(上)

第七章之main函数和启动例程

Windows逆向安全之基础知识

逆向——C语言的汇编表示之堆栈图 手把手示例 可以见后面在函数内部加一个局部变量以及嵌套调用的例子来综合理解

inline hook 之 ARM64 汇编基础

4CPP 面向对象之 ——多态多继承static 成员const 成员