unidecompiler-simulator
unidecompiler-simulator is a library for bounded execution of
unidecompiler generic IR. It depends on the decompiler core but the core does
not depend on, import, or know about this package.
The simulator owns frames, control flow, calls, limits, exceptions, and the
execution trace. A frontend may expose an optional simulation_adapter
attribute for frontend-specific function lookup and runtime facts. The adapter
may answer individual operations, but it must not execute functions, interpret
instructions, recover control flow, or return executable callbacks.
Generic IR execution is available without a frontend:
from unidecompiler_simulator import SimulationEngine
result = SimulationEngine().simulate_function(module, function, args=(1, 2))
Artifact execution gives an adapter the decoded frontend-owned payload only for function lookup and runtime hooks:
result = SimulationEngine().simulate_artifact(
data,
"sample.bytecode",
query={"class": "Example", "method": "run"},
)
The unidecompiler-cli package hosts the command-line interface and accepts a
frontend-owned function query and JSON arguments:
unidecompiler simulate sample.bytecode --function 'Example.run' --args '[1, 2]'
For the Lua bubble-sort fixture, compile the source before invoking the simulator. The Lua frontend adapter supplies only Lua function lookup and runtime value facts; the simulator still executes the lifted generic IR.
luac -o bubble_sort.luac simulator_projects/source/arithmetic.lua
unidecompiler simulate bubble_sort.luac --frontend lua --function bubble_sort --args '[[5, 1, 4, 2, 8]]'
The completed result contains "values": [[1, 2, 4, 5, 8]].
Built-in frontend adapters accept the following frontend-owned function queries:
| Frontend | Query |
|---|---|
Python .pyc |
Unique function name, for example arithmetic |
JVM .class |
Unique method name or Class.method, for example Sample.add |
| .NET assembly | Unique method name or Type.Method, for example Probe.Add |
| WebAssembly | Function name or $funcN, for example add or $func0 |
| Lua chunk | Unique function name, for example bubble_sort |
Ambiguous queries are rejected by the relevant frontend adapter. The simulator does not choose among overloads or perform frontend-specific name recovery.
Execution is bounded and in-memory. Unknown operations, unsupported IR, and unsafe runtime behavior stop with a structured result instead of guessing.
Generic numeric execution supports canonical operators and common neutral
shift, rotate, and bitwise aliases, including shl, shr, rol, and ror.
Signedness, bit width, float width, and integer wrap/trap overflow policy come
from generic IR and are never inferred from a frontend ID. Phi assignments at
block entry use parallel-copy semantics; explicit generic stores, deletes,
tuple/list kinds, and exception matching are also preserved.
Applications may inject an ExternalEnvironment for unresolved named calls.
The environment receives only ExternalCallRequest data and returns an
ExternalCallResult; it never receives IR, frames, adapters, or execution
control. Python-file loading is intentionally owned by unidecompiler-cli,
not this library.
The simulator does not resolve Global expressions as function names. Any
frontend-specific function lookup or dynamic call target must be provided by
the optional adapter and must resolve back to a FunctionIR owned by the
current lifted module.
The simulator intentionally does not execute frontend bytecode, frontend
opcode tables, or core Effect objects directly. Core is responsible for
lifting VM-neutral effects into generic IR; this package executes that generic
IR. Keeping that boundary strict prevents a language-specific opcode switch
from leaking into the simulator and keeps every frontend replaceable.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unidecompiler_simulator-0.1.4.tar.gz.
File metadata
- Download URL: unidecompiler_simulator-0.1.4.tar.gz
- Upload date:
- Size: 21.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a60d9b5f5e42bda657c5fb38965187daf16596de3065fd7f38dfc411b84610d
|
|
| MD5 |
0756a4d4dbc0b0f07db3eb6e59d424bd
|
|
| BLAKE2b-256 |
f005ee0b7bafe51fb327bd6ae5ee760513959c8cbe86cbfc22464a031ca02edf
|
File details
Details for the file unidecompiler_simulator-0.1.4-py3-none-any.whl.
File metadata
- Download URL: unidecompiler_simulator-0.1.4-py3-none-any.whl
- Upload date:
- Size: 21.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06828107f665388f896d94645fe523fe33205bc510a4bfedb090d1ce080a9da9
|
|
| MD5 |
90d2188c4f6a424672af0a784b5f929f
|
|
| BLAKE2b-256 |
ebd88477660d0fd91b6ca36ce467a0bfc6418e4baad4c944cce9ab427b859fb2
|