滴水逆向_学习笔记

滴水逆向第三期学习笔记


第二节 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 &lt;iostream&gt; #include&lt;Windows.h&gt; //构造裸函数 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>

页面列表

ITEM_HTML