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()