dyn
成员函数 | 函数描述/介绍 |
---|---|
dyn.Eval | 独立上下文执行一段新的 yak 代码 |
dyn.Import | 加载一个 yak 文件,并把代码中的某些变量提取出来 |
dyn.IsYakFunc | 判断一个对象是不是可供 yak 调用的函数,类似 python 的 callable |
dyn.LoadVarFromFile | 从一个文件/文件夹/模块中,批量导入一个对象,通常用于 exp/poc 编写的时候,需要批量导入一些模块的函数 |
dyn.params | 给导入的脚本额外增加一些变量 |
dyn.recursive | 用于 dyn.LoadVarFromFile 函数的额外参数,递归加载文件夹内容,会解析文件夹以及自文件下面所有的内容。 |
#
函数定义#
dyn.Eval独立上下文执行一段新的 yak 代码
#
详细描述独立上下文执行一串新的 yak 代码
die(dyn.Eval(`println(123); 1+1`))
执行上述代码之后,将会在屏幕中打印出 123
的结果
#
定义:func dyn.Eval(code: any) return (err: error)
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
code | any |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
err | error |
#
dyn.Import加载一个 yak 文件,并把代码中的某些变量提取出来
#
详细描述要注意的是,执行的新的代码 YAK_MAIN
会设置为 false,如果想要编写渗透测试工具,进行模块化编程,测试代码可以放在 if YAK_MAIN {}
中;
一般来说,这个函数经常会用作导入别的脚本的函数,我们创建如下两个文件
def abc(caller) { println(`abc from function is called by`, caller)}
v, err := dyn.Import(`a`, `abc`)die(err)
v.Value("b.yak")
然后通过 yak b.yak
来执行 b.yak
得到的结果如下:
abc from function is called by b.yak
#
定义:func dyn.Import(fileOrModel: string, varName: string) return (yakVariable: *yak.yakVariable, err: error)
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
fileOrModel | string | 可以是一个文件名(加不加 .yak 后缀均可)如果是一个文件夹的话,会自动寻找这个文件夹下的 main.yak 文件 |
varName | string |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
yakVariable | *yak.yakVariable | yak 的变量对象 |
err | error |
#
dyn.IsYakFunc判断一个对象是不是可供 yak 调用的函数,类似 python 的 callable
#
详细描述#
定义:func dyn.IsYakFunc(obj: any) return (result: bool)
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
obj | any | 想要判断的 yak 对象 |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
result | bool | 是一个 bool 值,标志该对象是否可以被调用 |
#
dyn.LoadVarFromFile从一个文件/文件夹/模块中,批量导入一个对象,通常用于 exp/poc 编写的时候,需要批量导入一些模块的函数
#
详细描述#
定义:func dyn.LoadVarFromFile(fromModules: string, varName: string, params dyn.param) return (r0: []*yak.yakVariable, r1: error)
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
fromModules | string | 可以是文件夹,可以是文件,如果是文件夹,将会把这个文件夹下所有的模块进行导入,如果是文件,将会只导入一个具体的文件 |
varName | string | 想要导入的变量的名称 |
params | dyn.param | 可变参数:导入的特性,常见的有 params, recursive 两个 |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r0 | []*yak.yakVariable | |
r1 | error |
#
dyn.params给导入的脚本额外增加一些变量
#
详细描述#
定义:func dyn.params(v1: map[string]any) return (r0: func yakEvalConfigOpt(v1: *yak.yakEvalConfig) )
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
v1 | map[string]any |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r0 | func yakEvalConfigOpt(v1: *yak.yakEvalConfig) |
#
dyn.recursive用于 dyn.LoadVarFromFile
函数的额外参数,递归加载文件夹内容,会解析文件夹以及自文件下面所有的内容。
#
详细描述dyn.LoadVarFromFile(`dir`, varName, dyn.recursive(true))
#
定义:func dyn.recursive(v1: bool) return (r0: func yakEvalConfigOpt(v1: *yak.yakEvalConfig) )
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
v1 | bool |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r0 | func yakEvalConfigOpt(v1: *yak.yakEvalConfig) |