suricata 3.1 源码分析1

原文链接: http://www.9mblog.com/5.html

首先进入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对已经写好的
正则表达式进行编译和预处理。*/
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值