Evm
字節碼中的第一條指令 (606060405)
我試圖弄清楚 EVM 字節碼是如何工作的,我在 Remix 中創建了一個空合約。彙編版本如下所示:
PUSH1 0x60 PUSH1 0x40 MSTORE CALLVALUE ISZERO PUSH1 0xE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x35 DUP1 PUSH1 0x1B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP
AFAIK第一部分在契約創建時執行,第二部分是契約程式碼本身。
我無法理解的是這部分:
PUSH1 0x60 PUSH1 0x40 MSTORE
為什麼我們需要在每個程序開始時將 smth 儲存在記憶體中?
回答我自己的問題:
這是空閒記憶體指針。前 0x40 字節保留用於內部計算。然後 0x40 - 0x60(一個字)儲存指向空閒記憶體(可用於分配)的指針 - 在這種情況下顯然是 0x60。
所以這段程式碼:
PUSH1 0x60 PUSH1 0x40 MSTORE
初始化記憶體指針。
詳細資訊: https ://solidity.readthedocs.io/en/develop/miscellaneous.html#layout-of-state-variables-in-storage