【逆向知识】裸函数(Naked函数)
生活随笔
收集整理的這篇文章主要介紹了
【逆向知识】裸函数(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,espsub esp,0x40// 保留現場push ebxpush esipush edi// 開始填充緩沖區mov eax,0xCCCCCCCCmov ecx,0x10lea edi,dword ptr ds:[ebp-0x40]rep stosd// 函數核心功能mov eax,dword ptr ds:[ebp+0x8]add eax,dword ptr ds:[ebp+0xC]// 恢復現場pop edipop esipop ebx//降低堆棧mov esp,ebppop ebpret} }int main() {// c語言函數實現add(1, 2);// 裸函數實現Plus(1,2);return 0; }轉載于:https://www.cnblogs.com/17bdw/p/8452400.html
總結
以上是生活随笔為你收集整理的【逆向知识】裸函数(Naked函数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Falsy Bouncer(第二种解决方
- 下一篇: webpack 3 零基础入门教程 #4