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;

}

c语言裸函数,【逆向知识】裸函数(Naked函数)相关推荐

  1. sum函数两个同行的元素相加_Excel函数公式大全:利用sum函数进行汇总以及对多个汇总进行求和...

    教程领到手,学习不用愁!领 ↑↑↑ 最高效最快速的入门学习方式:看知识兔视频课程,跟着知识兔老师操作,听知识兔老师讲解,初学者不要自己瞎琢磨瞎折腾,很容易走弯路.学以致用,光看不练都是假把式.学完知识 ...

  2. C++:C++语言入门级基础知识考察点回顾之函数、结构体和类

    C++:C++语言入门级基础知识考察点回顾之函数.结构体和类 目录 C++的函数 1.函数的定义.调用,全局变量局部变量 1.1.自定义函数求其倒数

  3. 你是真的“C”——详解C语言函数模块知识(上篇)

    详解C语言函数模块知识(上篇)

  4. 【C语言】函数基本知识详细讲解(库函数、自定义函数、参数、函数的套用.....

    接着上次的数组的基本知识,让我们来简单了解C语言里的函数. 目录 函数的定义 库函数 自定义函数 函数的参数 函数的调用: 函数的嵌套调用和链式访问 函数的声明和定义 函数递归. 总结  函数的定义 ...

  5. 破开C语言暗夜的第四道光(1)—— 函数基础知识

    函数基础知识 一.C语言中函数的分类 - 库函数 - 自定义函数 二.函数的声明与定义 - 函数的声明 - 函数的定义 三.函数的参数 - 实际参数(实参) - 形式参数(形参) 四.函数的调用 - ...

  6. SHELL/SSH基础知识(入门篇)-包含 shell 脚本语言的基本用法、 shell 脚本语言的基本用法、流程控制、函数 function、其它脚本相关工具、数组 array(欢迎留言交流)

    目录 1 shell 脚本语言的基本用法 1.1 shell 脚本注释规范 1.1.1 shell 脚本注释规范 1.1.2 执行(5种) 1.1.3 在远程主机运行本地脚本 1.1.4 检查shel ...

  7. c语言实现股票软件cost函数,麻烦编一个股票软件中WINNER,COST的函数-MC知识 -程序化交易(CXH99.COM)...

    MC回复讨论二: cost和winner两个函数见如下代码: //winner input: pricevalue(numericsimple); var: var_down(0), var_tota ...

  8. C语言试题三十二之编写函数function,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。

    1. 题目 请编写函数function,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数). 2 .温馨提示 C试题汇总里可用于计算机二级C语言笔试.机试.研究生复 ...

  9. lisp语言100以内勾股数_三个视频搞定:函数的最值、对勾函数、分式函数性质与图像、分段函数最值...

    ● 本文适合高一上学期.高三一轮复习的同学阅读.先看视频再看文字,看视频时注意利用暂停,想清楚每一步变形的依据. 01 函数的最值.对勾函数的性质 视频讲解 1.函数的最大(小)值 说明: (1)最大 ...

  10. python必备基础代码-新手上路必学的Python函数基础知识,全在这里了(多段代码举例)...

    原标题:新手上路必学的Python函数基础知识,全在这里了(多段代码举例) 导读:函数是Python中最重要.最基础的代码组织和代码复用方式.根据经验,如果你需要多次重复相同或类似的代码,就非常值得写 ...

最新文章

  1. 阿里云系列——7.阿里云IIS系列详解(过程+通用+最新)
  2. 成功解决TypeError: a bytes-like object is required, not 'str'
  3. 使用setfacl实现子目录继承父目录权 限
  4. Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
  5. Laravel神奇的服务容器
  6. 公网ip和私网ip的区别_自带公网IP上阿里云
  7. 获取某一天前七天的数据(不包括某一天)
  8. 开奖及送书|《漫画算法:小灰的算法之旅(Python篇)》
  9. Codeforces 932D - Tree
  10. Atitit 传感器之道 1. 视觉传感器 摄像头 1 1.1. 一、光线传感器: 1 1.2. 二、距离传感器: 1 1.3.    第一种是震动传感器。 4 1.4.   第二种是声响传感
  11. 怎样修改用户的计算机配置文件,用户配置文件
  12. OPC:服务器开发(一)如何开发OPC Server
  13. linux 目录权限上下文,谢烟客---------Linux之文件安全上下文及特殊权限位
  14. Apple Developer会员注册以及续订“支付授权失败...”问题
  15. vue -V 执行失败 檔案名稱、目錄名稱或磁碟區標籤語法錯誤。
  16. 论文阅读:SO-Net: Self-Organizing Network for Point Cloud Analysis
  17. GLES2.0中文API-glGetUniformLocation
  18. 模拟器计算机内存不足,模拟器内存不足要怎么办_怎样修改模拟器的内存大小 - 驱动管家...
  19. PAT甲级 1131 - Subway Map
  20. 主动信息获取模式下PLC性能的影响因素分析

热门文章

  1. C语言-printf打印的用法
  2. Pandas Dataframe 每隔n行取1行
  3. 集合中篇—栈与队列区块链
  4. 用python爬取豆瓣影评及影片信息(评论时间、用户ID、评论内容)
  5. 前端开发需要会什么?先掌握这三大核心关键技术
  6. How to customize the UI in IBM ITIM Solution
  7. 牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) H.了断局-递推
  8. Tomcat启动时,日志的中文乱码【淇℃伅】和【璀﹀憡】等
  9. Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
  10. 2011~至今 百度指数采集方法与工具、支持百度指数、资讯指数、媒体指数