File tree Expand file tree Collapse file tree 1 file changed +7
-2
lines changed Expand file tree Collapse file tree 1 file changed +7
-2
lines changed Original file line number Diff line number Diff line change 10
10
- ` JUMP_IF_FALSE ` 如果结果为 ` FALSE ` 则跳转,并弹出1次栈。
11
11
- ` JMP ` 无条件跳转,同时承载了调用函数的作用。
12
12
- ` EXTERN ` 调用外部函数,并弹出` 参数个数 ` 的栈。
13
- - ` ANNOTATION ` 调用外部函数,并弹出` 参数个数 ` 的栈。 * [ 2] *
13
+ - ` ANNOTATION ` 调用外部函数,并弹出` 参数个数 ` 的栈。(注意:尽管官方文档中声称这是一个什么都不做的长 NOP 但是定义与 EXTERN 类似,也许只是复制粘贴了 EXTERN 的声明) * [ 2] *
14
14
- ` JUMP_INDIRECT ` 无条件跳转至取消引用的地址,相当于x86_64下的` jmp [eax] ` 。 * [ 1] *
15
15
- ` COPY ` 将堆栈中的` 栈顶中第二个值 ` 赋值给` 堆栈顶部的值 ` ,并弹出2次栈。
16
16
17
17
` [1] ` 未证实的内容,仅通过猜测得出的结论。
18
18
19
19
` [2] ` 这条指令一般不会出现在正常编译后的 UdonSharp 汇编中。
20
20
21
+ 另可参阅:https://creators.vrchat.com/worlds/udon/vm-and-assembly/#udon-opcodes
22
+
21
23
# PUSH 和与 PUSH 有关的指令
22
24
```
23
25
以下所有出现的汇编都由本组织下的UdonSharpDisassmebler生成。
95
97
96
98
### 函数名包含的信息
97
99
100
+ 除了本文以外,官方文档对此做出了一些额外解释:https://creators.vrchat.com/worlds/udon/vm-and-assembly/#externs-reference
101
+
98
102
我们现在有这样一串文本 ` UnityEngineGameObject.__get_activeSelf__SystemBoolean ` ,` . ` 是一个分隔符,在分隔符的左边是` 命名空间+类名的组合 ` ,在右边是` 函数名+参数个数+返回值类型 ` 。
99
103
100
104
由于左边没有任何多余的可解读信息,我们从右边开始,一个完整的调用信息有以下规则:
@@ -172,7 +176,8 @@ bool __intnl_SystemBoolean_43 = __39__intnlparam > __const_SystemInt32_1;
172
176
todo...
173
177
174
178
# 结语
175
- 我认为这些东西不难理解,重点在于你是否具有一定编程基础,因为UdonSharp的设计过于简单,我不会说解读这样的反汇编很难,因为它只是一串一串对于人类来说非常可读的指令。
179
+
180
+ 因为UdonSharp的设计比较简单,所以我认为这些东西不难理解。
176
181
177
182
我在这里再抛出几个问题留给你思考:
178
183
You can’t perform that action at this time.
0 commit comments