Evm
呼叫某些 Opcode 時從堆棧中獲取值
我目前正在嘗試使用遺傳算法自動生成類似於 https://ieeexplore.ieee.org/abstract/document/7840029>this paper 的乙太坊智能合約的測試案例。為了做到這一點,我需要能夠評估特定函式與滿足分支謂詞的接近程度。查看操作碼可以告訴我何時出現分支謂詞,例如:
... SLOAD TIMESTAMP GT DUP1 ISZERO PUSH2 0x10f JUMPI #... More opcodes
在上面的範例中,從儲存中檢索一個值並與塊時間戳進行比較。如果該值大於時間戳,則使用 #… More opcodes 繼續執行,否則跳轉到 0x10f。我希望能夠在執行時以某種方式提取 SLOAD 和 TIMESTAMP 的值。
更一般地說,我的問題是:**執行“GT”操作碼時,有什麼方法可以獲取堆棧上的值?**理想情況下,我想在 pyevm 中執行此操作,但如果您知道另一種方法也可以。
使用 truffle 時,您可以使用調試功能,該功能可以為任何給定的事務雜湊逐步列印堆棧和操作碼。也可能直接訪問日誌而不是在終端中列印它們。
難道不能在 GT 之前註入一個操作碼來將值儲存在記憶體中,然後再讀取它們嗎?