A-A+

suricata 3.1 源码分析1

2017年07月25日 suricata 暂无评论

首先进入main函数

int main(int argc, char **argv)
{
    SCInstance suri;

    SCInstanceInit(&suri);  

    /*SCInstance类型的suri变量用来保存程序当前的一些状态、标志等上下文环境,通常是用来作为参数
      传递给各个模块的子函数,因此为了更好的封装性而放到一个结构体变量中,而不是使用零散的长串参数
      或一堆全局变量。SCInstanceInit函数,顾名思义,即是对suri中各个字段进行初始化。
      注意,这里对所有字段都进行了显示初始化,因为虽然一个memset清零已经基本达到目的了,但显示地将
      各个成员设成0/NULL/FALSE对于可读性来说还是有好处的,可以明确地说明各个字段的初始值,且对扩展
      性也会有好处,例如若后续初始化需要设置一些非0值(如用-1表示无效值),直接更改就好了*/


    suri.progname = argv[0];

    //将progname指向argv[0], 就是可执行程序的名字。

    sc_set_caps = FALSE;
    /*初始化sc_set_caps为FALSE –> 标识是否对主线程进行特权去除(drop privilege),
      主要是出于安全性考虑。*/

    SC_ATOMIC_INIT(engine_stage);
    /*初始化原子变量engine_stage –> 记录程序当前的运行阶段:SURICATA_INIT、
      SURICATA_RUNTIME、SURICATA_FINALIZE*/

    /* initialize the logging subsys */
    SCLogInitLogModule(NULL);
    //初始化日志模块,因为后续的执行流程中将使用日志输出,所以需要最先初始化该模块。

    void SCLogInitLogModule(SCLogInitData *sc_lid)
    {
        /* 清除之前的logModule*/
        SCLogDeInitLogModule();

        /* 为SCLogConfig类型申请内存空间,sc_log_config 是全局变量 */
        if ( (sc_log_config = SCMalloc(sizeof(SCLogConfig))) == NULL) {
            SCLogError(SC_ERR_FATAL, "Fatal error encountered in SCLogInitLogModule. Exiting...");
            exit(EXIT_FAILURE);
        }
        memset(sc_log_config, 0, sizeof(SCLogConfig));

        /* 初始化一些重要指标,现在sc_lid为NULL,所以全部为默认值 */

        SCLogSetLogLevel(sc_lid, sc_log_config);
        SCLogSetLogFormat(sc_lid, sc_log_config);
        SCLogSetOPIface(sc_lid, sc_log_config);
        SCLogSetOPFilter(sc_lid, sc_log_config);

        sc_log_module_initialized = 1;
        sc_log_module_cleaned = 0;

        //SCOutputPrint(sc_did->startup_message);

        return;
    }


    if (SCSetThreadName("Suricata-Main") < 0) {
        SCLogWarning(SC_ERR_THREAD_INIT, "Unable to set thread name");
    }

    //设置主程序名为“Suricata-Main”,SCSetThreadName是预定义的宏。

    ParseSizeInit();

    /*初始化ParserSize模块 –> 使用正则表达式来解析类似“10Mb”这种大小参数,
      其中正则引擎用的是pcre,因此初始化时就是调用pcre_compile、pcre_study对已经写好的
      正则表达式进行编译和预处理。*/

 

标签:

给我留言

Copyright © 九毛的官方博客 保留所有权利.   Theme  Ality

用户登录