Bro脚本语法4-声明和语句(Declarations and Statements)

Bro脚本语法4-声明和语句(Declarations and Statements)

@(教程)[Bro]

Declarations

Name Description
module 改变当前模块
export 从当前模块导出定义
global 声明一个全局变量
const 声明一个全局常量
type 声明一个一用户自定义类型
redef 重新定义一个全局值或者扩展一个用户自定义类型
function/event/hook 声明一个 function/event/hook

Statements

Name Description
local 声明一个局部变量
add, delete 添加或删除元素
print 打印到标准输出或文件
for, while, next, break 遍历所有容器的元素(for), 条件循环(while).
if 表达式bool条件判断执行
switch, break, fallthrough 计算表达式和匹配值执行语句
when 异步执行
event, schedule 调用或调度的事件处理程序
return 从 function, hook, 或event 处理程序返回

声明

不能在 function, hook, event 处理函数中使用声明
必须在语句之前使用声明

module
关键字module 用于改变当前的module,这会影响任何随后全局标识符作用范围
例子:

module mymodule

如果一个全局的定义(global)声明在module的后面,那他的作用域在Bro脚本结束的地方或者在下一个module声明的位置,如果一个全局的声明在module的后面,但是在export 语句块中,那么它的作用域将扩展到最后一个load的bro脚本结束,但是在其他的module中它必须通过命名空间操作符(::)来进行引用
在一个bro脚本中,可以有多个module声明,同一个module也可以写在多个不同的bro脚本中

export
export 语句块将当前module中的一个或者多个声明(不能将语句块写在其中)导出,在其他module中,这些全局标识通过操作符”(::)”变得可见
例子:

export {
    redef enum Log::ID += {
  LOG};

    type Info: record {
        ts: time &log;
        uid: sting &log;
    };

    const conntime = 30sec &redef;

}

注意,在导出块中括号是必须的,而且这个语句块也不需要用分号结束

global
声明一个全局变量
如果在声明的时候不指定类型,那么一定要赋一个初值,bro会实现类型推断,否则就一定要指定类型,或者在类型不能够准确推断的时候,也需要指定类型,例:

global pi = 3.14;
global host: set[addr];
global ciphers:table[sting] of sting = table();

在function ,event ,hook 外面的变量通常都需要用global 关键字(或者使用const 关键字);

在function ,event,hook 处理程序里面则不允许使用这个关键字,另外function 类型(不是函数体)也是可以通过global 关键字声明的.

global 关键字声明的变量作用域从声明的地方开始,到载入的脚本结束(同时,查看module 一节中的描述,当mudule改变的时候,对变量生命周期的改变)

const
const 用于声明一个常量
要求在声明的时候赋初值,同样的,类型可以被推断也可以准确指定

const
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值