美文网首页编程语言爱好者C语言
c语言逆向分析之函数1

c语言逆向分析之函数1

作者: 旧风景_ | 来源:发表于2017-05-29 00:10 被阅读0次

从汇编的角度去理解函数会让你更加的深刻。。。。。。

看这篇文章需要一定的c语言基础和汇编基础(能基本看懂简单的汇编指令)

先来分析一个简单的函数



这个函数功能是将两个数相加并返回结果

当我们这样调用


这是它的汇编代码


这是add函数的汇编代码 其他的汇编代码不用管

00401078   push        8 //第二个参数的值
0040107A   push        7  //第一个参数的值
0040107C   call        @ILT+20(add) (00401019) 
00401081   add         esp,8 

根据上面这段汇编代码我们得知
调用add函数的代码,参数是这样传递的:

先分别把两个参数的值给传入栈中(一般都是自右向左的传入参数)

当call指令执行时 自动将call的下一条指令的地址(函数返回地址)传入栈中

然后跳到00401019这个地址

我们进这个call来看看


这个jmp只是用来作为中转的
继续执行

好 进来了


这个就是add函数的汇编代码

我们来分析这段汇编代码

//将ebp寄存器也就是栈底保存到栈中
push        ebp  
//ebp用来寻找栈空间地址    为了方便esp更好的操作栈空间    
mov         ebp,esp
//开辟内存大小为40h(注意是十六机制!)的栈空间       
sub         esp,40h          
//这三个寄存器要拿来当指针操作
所以需要先保存,
程序返回时需要恢复,以免数据被破坏
push        ebx                              //[ebp-4]
push        esi                              //[ebp-8]
push        edi                              //[ebp-0xC]
//填充栈空间                                            
lea         edi,[ebp-40h]               //将栈顶的地址给edi
mov         ecx,10h                      
mov         eax,0CCCCCCCCh   
 //将eax的值放入edi的内存空间(栈)中 执行ecx次 每执行一次edi+4
//大致意思就是把栈空间全部填为CC
rep stos    dword ptr [edi]         
//这里是这个函数的主要功能
mov         eax,dword ptr [ebp+8]     //ebp+8存的就是我们第一个参数的值
add         eax,dword ptr [ebp+0Ch]  //ebp+0ch存的第二个参数的值
//恢复堆栈
pop         edi                                    
pop         esi
pop         ebx
//恢复栈顶
mov         esp,ebp
//恢复栈底
pop         ebp
//函数返回   
//就是把eip寄存器的值
修改成函数返回地址(eip存的地址就是CPU下一条执行的指令)
ret

这样分析函数已经够详细了吧
如果还看不懂可能是基础不够

可以自己观察栈空间的数值变化 很有趣的!

相关文章

  • c语言逆向分析之函数1

    从汇编的角度去理解函数会让你更加的深刻。。。。。。 看这篇文章需要一定的c语言基础和汇编基础(能基本看懂简单的汇编...

  • 汽车之家apisign unidbg逆向

    汽车之家apisign unidbg逆向 逆向 之前分析到了native函数的入口是sub_2D91C 看看sub...

  • 别看了,我就是糊弄糊弄,全是瞎敲的

    C语言 概述 1. Hello World代码分析: 2. System系统函数: 使用system函数可以调用其...

  • c语言if语句逆向分析

    来分析一下c语言if语句直接上代码 下面是对应的汇编代码,汇编代码是从vs2013上面复制的 先来分析一下变量j和...

  • C语言之函数与预编译= =

    函数定义 C语言程序框架C语言程序的框架有两种: 注意:1.一个源程序文件可由一个或多个函数组成之函数2.一个C语...

  • 函数变参的使用

    介绍C/C++,java,和go语言对函数变参的使用。 1. C/C++语言的变参 1.1 变参函数声明 变参函数...

  • 函数,Block,闭包

    对C语言的函数,OC的Block,Swift的闭包进行一下分析,以及比较. 首先说一下C语言里面的函数 这里只是写...

  • C/C++ 函数地址

    C 函数 C 语言中没有类的概念,只有普通的函数。 控制台输出: C++ 函数 C++ 函数有如下几种: 1)普通...

  • C++语言学习之面向对象

    1.C语言与C++语言的区别 C++面向对象 C 面向过程 函数+结构体 C++可以运行调用C语言 反之 C语言无...

  • OC编程语言课程笔记(四)函数成员(极客班)

    一、类型成员之 函数成员 1、方法2、初始化器3、析构器 1、方法 1、全局函数(c语言函数,在h文件里定义,在m...

网友评论

    本文标题:c语言逆向分析之函数1

    本文链接:https://www.haomeiwen.com/subject/wazhfxtx.html