跨不同 EVM 版本将字节码反汇编为操作码

问题描述 投票:0回答:2

我需要将字节码反汇编为跨不同 EVM 版本的操作码,以使其与编译期间使用的 EVM 版本无关?

作为第二个最佳选择 - 是否有反汇编程序,允许您指定要使用的 EVM 版本? 我在网上做了很多研究,但没有发现类似的东西。 我目前正在使用 evmdasm: https://github.com/ethereum/evmdasm

但它已经很长时间没有更新了,所以,作为问题的一个例子 - 随着上海的发布,以及

PUSH0
的引入,对于用上海EVM版本编译的合约,我有操作码
UNKNOWN_0x5f
(基本上无法识别的操作码 0x5f),而使用 Paris 版本编译的合约中的相同操作将看起来像
PUSH1 0x00

统一示例:
推入 0,堆栈到合约中,使用

paris
evm 版本进行编译,看起来像
PUSH1 0x00

如果您使用
shanghai
evm 版本编译相同的合约,它将看起来像
PUSH0

我想要的是反汇编器使这些操作码看起来相同。
在这种特定情况下,可以通过执行以下操作轻松实现:
decompiled_code.replace('PUSH0', 'PUSH1 0x00')
投向巴黎实施。

换句话说:

decompile(x_shanghai_compiled) == decompile(x_paris_deployed) == decompile(x_other_evm_compiled)

ethereum solidity decompiling opcode evm
2个回答
1
投票

您可以尝试Dedaub反汇编器;非常好,维护得很好。

https://library.dedaub.com/decompile


0
投票

对于任何有兴趣的人。我找到了一个现有的包,它允许您在反汇编过程中选择要使用的 evm 版本:
https://github.com/crytic/pyevmasm

此软件包还包含测试中 EVM 版本的良好变更日志,您可以在可能的地方使用它来进行统一:)

© www.soinside.com 2019 - 2024. All rights reserved.