diff --git a/examples/rootfs b/examples/rootfs index c6dc930b..cc5ffbcf 160000 --- a/examples/rootfs +++ b/examples/rootfs @@ -1 +1 @@ -Subproject commit c6dc930b680fcc1beb6a5c4cbcc1ef7ff82be969 +Subproject commit cc5ffbcf6eee81a1e2d6c983a05c3371cc011d30 diff --git a/qiling/arch/evm/vm/evm.py b/qiling/arch/evm/vm/evm.py index c8956207..73bd4e63 100644 --- a/qiling/arch/evm/vm/evm.py +++ b/qiling/arch/evm/vm/evm.py @@ -76,6 +76,8 @@ class QlArchEVMEmulator: code: bytes = b'', code_address: Address = None, contract_address: Address = None): + if code == b'' and not data: + code = self.ql.loader.code if isinstance(data, str): data = bytecode_to_bytes(data) if isinstance(code, str): diff --git a/qiling/core.py b/qiling/core.py index b27f4908..26ad30e7 100644 --- a/qiling/core.py +++ b/qiling/core.py @@ -123,7 +123,7 @@ class Qiling(QlCoreHooks, QlCoreStructs): else: self._ostype = ostype_convert(self._ostype.lower()) - if self._code == None: + if self._code == None and not (str(self._argv[0])): self._code = "qilingcode" if self._argv is None: self._argv = ["qilingcode"] @@ -140,9 +140,9 @@ class Qiling(QlCoreHooks, QlCoreStructs): ############## if (not self._interpreter and not self._baremetal) and self._code == None: if not os.path.exists(str(self._argv[0])): - raise QlErrorFileNotFound("Target binary not found: %s" %(self._argv[0])) + raise QlErrorFileNotFound("Target binary not found: %s" % (self._argv[0])) if not os.path.exists(self._rootfs): - raise QlErrorFileNotFound("Target rootfs not found") + raise QlErrorFileNotFound("Target rootfs not found %s" % (self._rootfs)) guessed_archtype, guessed_ostype, guessed_archendian = ql_guess_emu_env(self._path) diff --git a/qiling/loader/evm.py b/qiling/loader/evm.py index 32bcfe64..a416c372 100644 --- a/qiling/loader/evm.py +++ b/qiling/loader/evm.py @@ -13,10 +13,12 @@ class QlLoaderEVM(QlLoader): def __init__(self, ql:Qiling): super(QlLoaderEVM, self).__init__(ql) self.ql = ql - + if self.ql.code is None: with open(self.ql.path) as f: - self.ql.code = f.read() + self.code = f.read() + else: + self.code = ql.code def run(self): pass diff --git a/tests/test_evm.py b/tests/test_evm.py index 13acaa54..c7938ad0 100644 --- a/tests/test_evm.py +++ b/tests/test_evm.py @@ -77,7 +77,7 @@ class EVMTest(unittest.TestCase): self.assertTrue(testcheck.visited_hookinsn) def test_underflow_filename(self): - ql = Qiling(["rootfs/evm/Hexagon.hex"], archtype="evm", verbose=4) + ql = Qiling(["../examples/rootfs/evm/Hexagon.hex"], archtype="evm", verbose=4) user1 = ql.arch.evm.create_account(balance=100*10**18) user2 = ql.arch.evm.create_account(balance=100*10**18) @@ -89,7 +89,7 @@ class EVMTest(unittest.TestCase): return ql.run(code=msg2) # Deploy runtime code - msg0 = ql.arch.evm.create_message(user1, b'', code=ql.code, contract_address=c1) + msg0 = ql.arch.evm.create_message(user1, b'', contract_address=c1) ql.run(code=msg0) # # SMART CONTRACT DEPENDENT: check balance of user1