逆向知识裸函数(Naked函数)

Posted 17bdw随手笔记

tags:

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

1 说明

指定裸函数编写的函数,编译器生成不带任何多余代码。 利用此功能,可以使用内联汇编程序代码编写自己的 prolog/epilog 代码序列。 裸函数对于编写虚拟设备驱动程序特别有用。

2 练习目的

  • 熟悉堆栈结构

  • 参数、局部变量的位置

  • 返回值存储的位置

3 代码实现

// 20180217_裸函数.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

// 两数相加函数
int add(int x, int y)
{
    return x+y;
}


// 裸函数实现 两数相加函数
int __declspec(naked) Plus(int x, int y) 
{
    __asm
    {
        //保留调用前的栈底
        push ebp
        // 提升堆栈
        mov ebp,esp
        sub esp,0x40
        // 保留现场
        push ebx
        push esi
        push edi
        // 开始填充缓冲区
        mov eax,0xCCCCCCCC
        mov ecx,0x10
        lea edi,dword ptr ds:[ebp-0x40]
        rep stosd

        // 函数核心功能
        mov eax,dword ptr ds:[ebp+0x8]
        add eax,dword ptr ds:[ebp+0xC]

        // 恢复现场
        pop edi
        pop esi
        pop ebx

        //降低堆栈
        mov esp,ebp
        pop ebp
        ret
    }
}


int main()
{
    // c语言函数实现
    add(1, 2);
    // 裸函数实现
    Plus(1,2);
    return 0;
}

以上是关于逆向知识裸函数(Naked函数)的主要内容,如果未能解决你的问题,请参考以下文章

VC/C++ 裸属性有啥作用?

在裸函数内部 - 如何进行简单的赋值

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

逆向及Bof基础实践

20155307刘浩《网络对抗》逆向及Bof基础