第二节 2.1裸函数与汇编写法
<h4>1、裸函数的写法</h4>
<h4>2、如何在C语言里写汇编代码</h4>
<hr />
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/e702a9fe940c019a83b6349ddaea5404" alt="" /></p>
<h5>声明一个裸函数后,编译器不会生成任何的代码</h5>
<hr />
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/f736d601dcfb20522a2d1383e6a8f5fe" alt="" /></p>
<hr />
<pre><code class="language-cpp">#include <iostream>
#include<Windows.h>
//构造裸函数
int __declspec(naked) plus(int x,int y)
{
__asm
{
//提升堆栈
push ebp
mov ebp,esp
sub esp,0x40
//保护现场
push edi
push ebx
push esi
//填充缓冲区
lea edi,dword ptr ss:[ebp-0x40]
mov ecx,0x10
mov eax,0xcccccccc
rep stosd
//加法功能
mov eax,[ebp+0x8]
add eax,[ebp+0xc]
//恢复现场
pop esi
pop ebx
pop edi
//降低堆栈
mov esp,ebp
pop ebp
ret
}
}
int main()
{
plus(1,2);
system("pause");
}
</code></pre>