|
|
# CALL指令
|
|
|
|
|
|
## CALL
|
|
|
## 详细设计
|
|
|
|
|
|
|
|
|
### 概述
|
|
|
|
... | ... | @@ -25,21 +26,21 @@ CALL指令结束写入的操作数: |success| |
|
|
|
|
|
下列表格展示了CALL指令不同阶段使用到的gadget,以及gadget的执行顺序。
|
|
|
|
|
|
执行阶段|gadget名称|执行顺序
|
|
|
-----|-----|-----
|
|
|
CALL指令调用前|CALL_1|1
|
|
|
CALL指令调用前|CALL_2|2
|
|
|
CALL指令调用前|CALL_3|3
|
|
|
CALL指令调用前|CALL_4|4
|
|
|
CALL指令调用前|CALL_5|5
|
|
|
CALL指令调用前|CALL_6|6
|
|
|
CALL指令调用前|CALL_7|7
|
|
|
CALL指令调用中|被调用合约OPCODE的gadget(如:ADD,PUSH,CODESIZE)|8
|
|
|
同上|...|9
|
|
|
CALL指令调用结束|STOP/RETURN/REVERT|20
|
|
|
CALL指令调用结束后|END_CALL|21
|
|
|
CALL指令调用结束后|POST_CALL_1|22
|
|
|
CALL指令调用结束后|POST_CALL_2|23
|
|
|
| 执行阶段 | gadget名称 | 执行顺序 |
|
|
|
| ------------------ | --------------------------------------------------- | -------- |
|
|
|
| CALL指令调用前 | CALL_1 | 1 |
|
|
|
| CALL指令调用前 | CALL_2 | 2 |
|
|
|
| CALL指令调用前 | CALL_3 | 3 |
|
|
|
| CALL指令调用前 | CALL_4 | 4 |
|
|
|
| CALL指令调用前 | CALL_5 | 5 |
|
|
|
| CALL指令调用前 | CALL_6 | 6 |
|
|
|
| CALL指令调用前 | CALL_7 | 7 |
|
|
|
| CALL指令调用中 | 被调用合约OPCODE的gadget(如:ADD,PUSH,CODESIZE) | 8 |
|
|
|
| 同上 | ... | 9 |
|
|
|
| CALL指令调用结束 | STOP/RETURN/REVERT | 20 |
|
|
|
| CALL指令调用结束后 | END_CALL | 21 |
|
|
|
| CALL指令调用结束后 | POST_CALL_1 | 22 |
|
|
|
| CALL指令调用结束后 | POST_CALL_2 | 23 |
|
|
|
|
|
|
### 各gadget的电路布局以及负责的功能
|
|
|
|
... | ... | |