• Flash for Linux


    http://f4l.sourceforge.net/


    顺便COPY段代码先扔这里:

    --- d:\vsprojects\vcpros\consolepros\vckbase1\first.cpp  -------------------
    1:    #include <stdio.h>
    2:
    3:    int main(int argc, char** argv, char** envp)
    4:    {
    00401010   push        ebp  ;save ebp(cpu->内存)
    00401011   mov         ebp,esp  ;set stack frame pointer
    00401013   sub         esp,40h  ;allocate space for locals
    00401016   push        ebx  ;save registers-------下面内容均如此
    00401017   push        esi
    00401018   push        edi
    00401019   lea         edi,[ebp-40h]
    0040101C   mov         ecx,10h
    00401021   mov         eax,0CCCCCCCCh
    00401026   rep stos    dword ptr [edi]
    5:        return 0;
    00401028   xor         eax,eax
    6:    }
    0040102A   pop         edi
    0040102B   pop         esi
    0040102C   pop         ebx  ;restore registers
    0040102D   mov         esp,ebp  ;restore stack pointer
    0040102F   pop         ebp  ;restore ebp
    00401030   ret    ;return from function
    --- No source file  --------------------------------------------------------


    argc = 1 ;因为在VC中要读取你的*argv指向的应用程序名字(*.exe)
    * argv = D:\VSPROJECTS\VCPROS\CONSOLEPROS\vckbase1\Debug\vckbase1.exe
    * envp = ALLUSERSPROFILE=C:\Documents and Settings\All Users

     =============================================================

    Considerations when Writing Prolog/Epilog Code

    Microsoft Specific —>

    Before writing your own prolog and epilog code sequences, it is important to understand how the stack frame is laid out. It is also useful to know how to use the __LOCAL_SIZE predefined constant.

    C Stack Frame Layout

    This example shows the standard prolog code that might appear in a 32-bit function:

    push     ebp                 ; Save ebp
    mov      ebp, esp            ; Set stack frame pointer
    sub      esp, localbytes     ; Allocate space for locals
    push     <registers>         ; Save registers
    

    The localbytes variable represents the number of bytes needed on the stack for local variables, and the registers variable is a placeholder that represents the list of registers to be saved on the stack. After pushing the registers, you can place any other appropriate data on the stack. The following is the corresponding epilog code:

    pop      <registers>         ; Restore registers
    mov      esp, ebp            ; Restore stack pointer
    pop      ebp                 ; Restore ebp
    ret                          ; Return from function
    

    The stack always grows down (from high to low memory addresses). The base pointer (ebp) points to the pushed value of ebp. The local variables area begins at ebp-2. To access local variables, calculate an offset from ebp by subtracting the appropriate value from ebp.

    The __LOCAL_SIZE Constant

    The compiler provides a constant, __LOCAL_SIZE, for use in the inline assembler block of function prolog code. This constant is used to allocate space for local variables on the stack frame in custom prolog code.

    The compiler determines the value of __LOCAL_SIZE. The value is the total number of bytes of all user-defined local variables and compiler-generated temporary variables. __LOCAL_SIZE can be used only as an immediate operand; it cannot be used in an expression. You must not change or redefine the value of this constant. For example:

    mov      eax, __LOCAL_SIZE           ;Immediate operand--Okay
    mov      eax, [ebp - __LOCAL_SIZE]   ;Error
    

    The following example of a naked function containing custom prolog and epilog sequences uses __LOCAL_SIZE in the prolog sequence:

    __declspec ( naked ) func()
    {
    int i;
    int j;
    __asm      /* prolog */
    {
    push   ebp
    mov      ebp, esp
    sub      esp, __LOCAL_SIZE
    }
    /* Function body */
    __asm      /* epilog */
    {
    mov      esp, ebp
    pop      ebp
    ret
    }
    }  
    

    END Microsoft Specific


     

  • 相关阅读:
    Spring Cloud Config 配置中心
    Spring Cloud Zuul 路由网关
    Spring Cloud Hystrix 断路器
    Spring Cloud feign 服务消费者
    Spring Cloud Ribbon 负载均衡
    Spring Cloud Eureka 服务注册与发现
    CSS编辑工具
    CSS简史
    CSS简介
    Less的内置函数
  • 原文地址:https://www.cnblogs.com/shanzy/p/513429.html
Copyright © 2020-2023  润新知