File size: 1,626 Bytes
66f8fc1 b4c7402 e98177c b4c7402 e98177c b4c7402 e98177c b4c7402 e98177c b4c7402 e98177c b4c7402 0f808c3 66f8fc1 329f9c0 e98177c 3db437f 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 |
import gradio as gr
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(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(["cc", "-c", temp_c_file_name, "-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()
return compiled_bytes
def predict(source):
bytes = compile(source)
return bytes, 1.0
def run():
demo = gr.Interface(
fn=predict,
description=description,
inputs=gr.Textbox(lines=10, label="Decompiled C Source Code"),
outputs=[gr.Textbox(), gr.Number()],
)
demo.launch(server_name="0.0.0.0", server_port=7860)
run()
|