• __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.在逆向工程时,使用嵌入汇编,直接从被逆向软件中复制代码序列

  • 相关阅读:
    woj 1574
    UESTC 594 我要长高 dp单调队列
    HDU 3401 Trade dp 单调队列优化
    HDU 2844 Coins 多重背包
    2-1
    1-2
    1-1
    12-1
    9-1
    14-8
  • 原文地址:https://www.cnblogs.com/bitxj/p/2708046.html
Copyright © 2020-2023  润新知