• __declspec( naked )语言扩展


    从VS6.0开始,微软增加了__declspec( naked )语言扩展,例如:
    __declspec( naked ) int func( int n ) {
        // Function body
    }

    此关键字的功能是禁止编译器生成函数体的前导处理和收尾处理。实际上,编译器在生成时,不在为此函数生成栈帧的维护代码序列。

    例如对于如下C函数:
    int fun(int n) {
        return n+1;
    }

    常规函数在生成本地机器指令时一般会生成如下的形式:
    int fun(int n) {
        push ebp
        mov ebp, esp

        // Function Body Start
        mov eax, ebp+8
        inc eax
        // Function Body End

        pop ebp
        retn 4
    }
    而加上__declspec( naked )扩展时,则会生成如下形式:

    int fun(int n) {
        // Function Body Start
        mov eax, ebp+8
        inc eax
        // Function Body End
    }
    说了这么多,其主要用途可归结为如下两点:
    1.使用嵌入汇编,人工实现代码的特殊优化
    2.在逆向工程时,使用嵌入汇编,直接从被逆向软件中复制代码序列

  • 相关阅读:
    条件运算符 (?:)
    SVN地址修改
    dev -gridview隐藏子表标题
    继承与 Data Member(3)
    继承与 Data Member(2)
    继承与 Data Member(1)
    Data Member 的存取
    Data Member 的布局
    Data Member 的绑定
    对于 sizeof(class_name) 值的讨论(2)
  • 原文地址:https://www.cnblogs.com/bitxj/p/2708046.html
Copyright © 2020-2023  润新知