Spaces:
Sleeping
Sleeping
File size: 2,011 Bytes
70ebd4a 66f8fc1 20b2b87 b4c7402 e98177c 20b2b87 b4c7402 e98177c b4c7402 e98177c b4c7402 20b2b87 e98177c 36c1bbc e98177c b4c7402 e98177c 20b2b87 777a3cd 66f8fc1 329f9c0 e98177c 41e9ae6 20f12de 41e9ae6 0f808c3 329f9c0 66f8fc1 329f9c0 720784d e98177c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
from hexdump2 import hexdump
import gradio as gr
import shlex
import subprocess
import tempfile
description = """This is a space testing a method for evaluating the quality of decompilation.
Currently unhandled features:
* Global references
* Function calls
* Compiler and flag selection
"""
def compile(compiler, flags, source):
# Create a temporary file for the C source code
with tempfile.NamedTemporaryFile(suffix=".c", delete=False) as temp_c_file:
temp_c_file.write(source.encode())
temp_c_file_name = temp_c_file.name
# Create a temporary file for the object file
with tempfile.NamedTemporaryFile(suffix=".o", delete=False) as temp_o_file:
temp_o_file_name = temp_o_file.name
# Compile the C file to an object file
subprocess.run([compiler, "-c", temp_c_file_name] + shlex.split(flags) + ["-o", temp_o_file_name], check=True)
# Create a temporary file for the raw bytes
with tempfile.NamedTemporaryFile(suffix=".raw", delete=True) as raw_bytes_file:
subprocess.run(
[
"objcopy",
"--only-section",
".text",
"-O",
"binary",
temp_o_file_name,
raw_bytes_file.name,
]
)
compiled_bytes = raw_bytes_file.read()
print(compiled_bytes)
return compiled_bytes
def predict(target, source, compiler, flags):
bytes = compile(compiler, flags, source)
return hexdump(bytes), 1.0
def run():
demo = gr.Interface(
fn=predict,
description=description,
inputs=[
gr.Textbox(lines=10, label="Python bytestring of binary code"),
gr.Textbox(lines=10, label="Decompiled C Source Code"),
gr.Textbox(label="Compiler", value="gcc"),
gr.Textbox(label="Compiler Flags", value="-O2"),
],
outputs=[gr.Textbox(), gr.Number()],
)
demo.launch(server_name="0.0.0.0", server_port=7860)
run()
|