zoukankan      html  css  js  c++  java
  • __declspec(naked) 生成纯汇编使用方法

    __declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码,通俗说可生成纯汇编。

    使用方法:

    #define  NAKED __declspec(naked) 

    VOID NAKED MyFunc() 

        __asm 

        { 

            ret 

        } 

    1,使用naked 关键字必须自己构建EBP 指针(如果用到了的话);

    2,必须自己使用RET 或RET n 指令返回(除非你不返回);

    这是编译器直接拿来用的汇编函数代码,所以一定要记得在开始的时候保存上下文标志位(压栈),在结束的时候要记得恢复上下文(出栈)。并且在结尾要加上ret命令。对于一般的汇编内嵌代码,不必保存上下文了,保存也不会有事,但是不能再加ret命令,因为编译器也会为其加一个,ret命令不能同时执行两次。会导致越界错误。

    __declspec(naked) int  add(int a,int b) 

       __asm mov eax,a 

       __asm add eax,b 

       __asm ret  

    __declspec(naked) int __stdcall function(int a,int b) 

        __asm mov eax,a 

        __asm add eax,b 

        __asm ret 8        //注意后面的8 

  • 相关阅读:
    最容易懂的红黑树
    Chapter 9 (排序)
    【WC2013】糖果公园
    【Luogu1903】数颜色
    【笔记】Sigmoid函数
    【笔记】费马小定理、数论欧拉定理
    【笔记】单层感知机
    2020ICPC.小米 网络选拔赛第一场
    【Luogu3366】模板:最小生成树
    Codeforces Raif Round 1
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693472.html
Copyright © 2011-2022 走看看