/ Модель

Характеристики

Лицензия
MIT
Опубликована
26 фев 2024

llm4decompile-6.7b

Генерация текстаТекст → текст

LLM4Decompile-6.7B преобразует инструкции x86 в ассемблере в код на C для задач декомпиляции и обратной разработки.

0скачиваний за 30 дней4лайкавеса обновлены20 мар 2024

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

LLM4Decompile-6.7B — модель семейства LLM4Decompile от команды arise-sustech для преобразования инструкций x86 в ассемблере в исходный код на C. Модель дообучена на DeepSeek-Coder на 4 млрд пар ассемблерного кода и C, собранных из AnghaBench, и доступна в форматах PyTorch и Safetensors.

Модель предназначена для анализа дизассемблированных бинарных файлов и восстановления читаемого C-кода, например, при обратной разработке и изучении поведения программ. В README приведены оценки перекомпилируемости и повторного выполнения восстановленного кода на разных уровнях оптимизации; результаты зависят от оптимизации исходной сборки и не гарантируют точного восстановления оригинального кода. Лицензия — MIT.

Сценарии применения

  • восстановление C-кода из дизассемблированных инструкций x86
  • анализ поведения бинарных файлов
  • подготовка восстановленного кода к перекомпиляции
  • изучение результатов компиляции C-кода в ассемблер

Ограничения

Восстановленный код может отличаться от оригинала и не всегда успешно перекомпилируется или воспроизводит поведение бинарного файла; результаты зависят от уровня оптимизации. Оценки в README приведены на ограниченном наборе AnghaBench.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

1. Introduction of LLM4Decompile

LLM4Decompile aims to decompile x86 assembly instructions into C. It is finetuned from Deepseek-Coder on 4B tokens of assembly-C pairs compiled from AnghaBench.

2. Evaluation Results

ModelRe-compilabilityRe-executability
Optimization-levelO0O1O2O3Avg.O0O1O2O3Avg.
GPT40.920.940.880.840.8950.13410.18900.15240.08540.1402
DeepSeek-Coder-33B0.06590.08660.15000.14630.11220.00000.00000.00000.00000.0000
LLM4Decompile-1b0.87800.87320.86830.83780.86430.15730.07680.10000.08780.1055
LLM4Decompile-6b0.88170.89510.86710.84760.87290.30000.17320.19880.18410.2140
LLM4Decompile-33b0.81340.81950.81830.83050.82040.30490.19020.18170.18170.2146

3. How to Use

Here give an example of how to use our model. First compile the C code into binary, disassemble the binary into assembly instructions:

import subprocess
import os
import re

digit_pattern = r'\b0x[a-fA-F0-9]+\b'# binary codes in Hexadecimal
zeros_pattern = r'^0+\s'#0s
OPT = ["O0", "O1", "O2", "O3"]
fileName = 'path/to/file'
with open(fileName+'.c','r') as f:#original file
    c_func = f.read()
for opt_state in OPT:
    output_file = fileName +'_' + opt_state
    input_file = fileName+'.c'
    compile_command = f'gcc -c -o {output_file}.o {input_file} -{opt_state} -lm'#compile the code with GCC on Linux
    subprocess.run(compile_command, shell=True, check=True)
    compile_command = f'objdump -d {output_file}.o > {output_file}.s'#disassemble the binary file into assembly instructions
    subprocess.run(compile_command, shell=True, check=True)
    
    input_asm = ''
    with open(output_file+'.s') as f:#asm file
        asm= f.read()
    asm = asm.split('Disassembly of section .text:')[-1].strip()
    for tmp in asm.split('\n'):
        tmp_asm = tmp.split('\t')[-1]#remove the binary code
        tmp_asm = tmp_asm.split('#')[0].strip()#remove the comments
        input_asm+=tmp_asm+'\n'
    input_asm = re.sub(zeros_pattern, '', input_asm)
    before = f"# This is the assembly code with {opt_state} optimization:\n"#prompt
    after = "\n# What is the source code?\n"#prompt
    input_asm_prompt = before+input_asm.strip()+after
    with open(fileName +'_' + opt_state +'.asm','w',encoding='utf-8') as f:
        f.write(input_asm_prompt)

Then use LLM4Decompile to translate the assembly instructions into C:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_path = 'arise-sustech/llm4decompile-6.7b'
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path,torch_dtype=torch.bfloat16).cuda()

with open(fileName +'_' + opt_state +'.asm','r') as f:#original file
    asm_func = f.read()
inputs = tokenizer(asm_func, return_tensors="pt").to(model.device)
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=512)
c_func_decompile = tokenizer.decode(outputs[0][len(inputs[0]):-1])

4. License

This code repository is licensed under the DeepSeek License.

5. Contact

If you have any questions, please raise an issue.

6. Citation

@misc{tan2024llm4decompile,
      title={LLM4Decompile: Decompiling Binary Code with Large Language Models}, 
      author={Hanzhuo Tan and Qi Luo and Jing Li and Yuqun Zhang},
      year={2024},
      eprint={2403.05286},
      archivePrefix={arXiv},
      primaryClass={cs.PL}
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Нельзя запустить

Доступ к модели ограничен автором; у платформы нет доступа к весам.

Ревизия весов
307c52d

0 моделей