zoukankan      html  css  js  c++  java
  • C与汇编混合;C程序是怎么开始和结束的

    副标题:

         在汇编中使用Standard C Library。

         main函数的执行过程。

         main函数与Standard C Library的交互。

    image

    C程序是怎么开始和结束的:

    image

         在这里,一个C程序就是一个process

         Note: The only way a program is executed by the kernel is when one of the exec functions is called.

                   The only way a process voluntarily terminates is when _exit or _Exit is called, either explicitly or implecitly.

                    A process can also be involuntarily terminated by a signal (not shown in the previous figure).

    A simple example:

    #include "apue.h"
    
    static void my_exit1(void);
    static void my_exit2(void);
    
    int main(void)
    {
        if (atexit(my_exit2) != 0)
            err_sys("can't register my_exit2");
    
        if (atexit(my_exit1) != 0)
            err_sys("can't register my_exit1");
        if (atexit(my_exit1) != 0)
            err_sys("can't register my_exit1");
    
        printf("main is done\n");
        return 0;   /* the result is same as exit(0)  */
                    /* but _exit(0) or _Exit(0) do not deal with exit handlers */
    }
    
    static void my_exit1(void)
    {
        printf("fist exit handler\n");
    }
    
    static void my_exit2(void)
    {
        printf("second exit handler\n");
    }

    执行结果:

    main is done
    fist exit handler
    fist exit handler
    second exit handler

         atexit(void (* func)(void)) 这个函数设定一个process的exit handler,一般来说最多可设定32个(根据具体系统有所不同)。exit() function执行全部的exit handler,按照设定时的反序执行。

         注意:函数之前用static修饰只表示这个函数只能在这个文件中被引用,不能在其他文件中引用。没有其他的意思。

                  我们在main()函数中调用的是return,它返回到C start-up routine, 由它执行exit()。

  • 相关阅读:
    MSF 内网渗透笔记
    weblogic 安装部署详解
    获取指定ip段的所有存活主机的主机名和操作系统
    中间件安全加固之Jboss
    window下JBoss7 安装部署
    Window日志分析
    Apache安全配置基线指导
    dedeCMS解码
    日志分析技巧
    利用开源软件打造一个团队贡献平台
  • 原文地址:https://www.cnblogs.com/wangshuo/p/2038601.html
Copyright © 2011-2022 走看看