/ Модель

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

Контекст
8 192 токена
Параметры
6,6 млрд
Размер весов
13,5 ГБ
Лицензия
MIT
Архитектура
llama · dense
Опубликована
16 мар 2024

llm4decompile-6.7b-uo

Генерация текстаТекст → текст3 профессии

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

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

Бенчмарки

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

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Текст» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

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

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

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

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

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

LLM4Decompile-6.7B-UO — модель семейства Llama, разработанная авторами проекта LLM4Decompile и дообученная на базе DeepSeek-Coder для декомпиляции инструкций x86 в код на C. Она предназначена для анализа ассемблерного кода и восстановления исходного кода, в том числе при неизвестном уровне оптимизации компилятора. Модель содержит 6,6 млрд параметров, имеет контекст длиной 8192 токена и распространяется в форматах PyTorch и Safetensors.

Модель обучена на 4 млрд токенов пар «ассемблер—C», скомпилированных из AnghaBench. Для версии UO средняя доля повторно выполняемого результата в оценке авторов составляет около 0,21; это указывает на ограничения точного восстановления поведения программы. Лицензия — MIT.

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

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

Ограничения

Средняя повторная исполняемость результата для UO в оценке авторов составляет около 0,21, поэтому сгенерированный код может не воспроизводить поведение исходной программы. Контекст модели ограничен 8192 токенами.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

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

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.

Note: The unified optimization (UO) model is trained without prior knowledge of the optimization levels (O0~O3), the average re-executability is arond 0.21.

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

Note: For the UO model, it is trained without prior knowledge of the optimization levels (O0~O3), therefore, the prompt is slightly different.

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:#original 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:\n"#prompt different for the UO model
    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-uo'
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

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

Можно запустить

Подбираем GPU…

Класс архитектуры
LlamaForCausalLM
Ревизия весов
cac962c

0 моделей