为什么 ChunkSpy .function 部分有四个参数?
Why ChunkSpy .function part has four parameters?
在使用 ChunkSpy 时,我发现有一件事让我感到困惑。让我们看看下面的例子
>a = 1
; source chunk: (interactive mode)
; x86 standard (32-bit, little endian, doubles)
; function [0] definition (level 1)
; 0 upvalues, 0 params, 2 stacks
.function 0 0 2 2
.const "a" ; 0
.const 1 ; 1
[1] loadk 0 1 ; 1
[2] setglobal 0 0 ; a
[3] return 0 1
; end of function
既然这里是0 upvalues, 0 params, 2 stacks
,为什么.function 0 0 2 2
里面有四个参数
在另一个例子中,我们可以看到
>local a; function b() a = 1 return a end
; source chunk: (interactive mode)
; x86 standard (32-bit, little endian, doubles)
; function [0] definition (level 1)
; 0 upvalues, 0 params, 2 stacks
.function 0 0 2 2
.local "a" ; 0
.const "b" ; 0
; function [0] definition (level 2)
; 1 upvalues, 0 params, 2 stacks
.function 1 0 0 2
.upvalue "a" ; 0
.const 1 ; 0
[1] loadk 0 0 ; 1
[2] setupval 0 0 ; a
[3] getupval 0 0 ; a
[4] return 0 2
[5] return 0 1
; end of function
[1] closure 1 0 ; 1 upvalues
[2] move 0 0
[3] setglobal 1 0 ; b
[4] return 0 1
; end of function
所以我猜第一个参数是upvalues,但是第二个参数有什么用呢?
在 Egor Skriptunoff 的帮助下,我从评论中得到了答案。
带有四个参数的.fucntion部分含义如下:
- 上层数
- 命名参数的数量
- arg 的标志:1=VARARG_HASARG、2=VARARG_ISVARARG、4=VARARG_NEEDSARG。正常功能始终为 0,主功能块始终为 2。
- 叠数
在使用 ChunkSpy 时,我发现有一件事让我感到困惑。让我们看看下面的例子
>a = 1
; source chunk: (interactive mode)
; x86 standard (32-bit, little endian, doubles)
; function [0] definition (level 1)
; 0 upvalues, 0 params, 2 stacks
.function 0 0 2 2
.const "a" ; 0
.const 1 ; 1
[1] loadk 0 1 ; 1
[2] setglobal 0 0 ; a
[3] return 0 1
; end of function
既然这里是0 upvalues, 0 params, 2 stacks
,为什么.function 0 0 2 2
在另一个例子中,我们可以看到
>local a; function b() a = 1 return a end
; source chunk: (interactive mode)
; x86 standard (32-bit, little endian, doubles)
; function [0] definition (level 1)
; 0 upvalues, 0 params, 2 stacks
.function 0 0 2 2
.local "a" ; 0
.const "b" ; 0
; function [0] definition (level 2)
; 1 upvalues, 0 params, 2 stacks
.function 1 0 0 2
.upvalue "a" ; 0
.const 1 ; 0
[1] loadk 0 0 ; 1
[2] setupval 0 0 ; a
[3] getupval 0 0 ; a
[4] return 0 2
[5] return 0 1
; end of function
[1] closure 1 0 ; 1 upvalues
[2] move 0 0
[3] setglobal 1 0 ; b
[4] return 0 1
; end of function
所以我猜第一个参数是upvalues,但是第二个参数有什么用呢?
在 Egor Skriptunoff 的帮助下,我从评论中得到了答案。
带有四个参数的.fucntion部分含义如下:
- 上层数
- 命名参数的数量
- arg 的标志:1=VARARG_HASARG、2=VARARG_ISVARARG、4=VARARG_NEEDSARG。正常功能始终为 0,主功能块始终为 2。
- 叠数