/ Модель

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

Контекст
16 384 токена
Параметры
1,3 млрд
Лицензия
MIT
Архитектура
llama · dense
Опубликована
10 мая 2024

llm4decompile-1.3b-v1.5

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

Модель LLM4Decompile преобразует инструкции x86 в код на C для декомпиляции и анализа скомпилированных программ.

639скачиваний за 30 дней6лайковвеса обновлены20 июн 2024

Бенчмарки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LLM4Decompile-1.3B-v1.5 — плотная авторегрессионная модель семейства LLaMA от проекта LLM4Decompile, предназначенная для преобразования инструкций x86 в код на C. Версия V1.5 обучена на наборе данных объёмом 15 млрд токенов; в README указана максимальная длина последовательности 4096 токенов. Метаданные Hugging Face указывают 1,3 млрд параметров и нативный контекст 16 384 токена.

Модель подходит для восстановления исходного кода по ассемблерным функциям, анализа скомпилированных программ и исследовательских экспериментов по декомпиляции. README сообщает об улучшении результатов относительно предыдущей версии, но приведённые данные не позволяют установить надёжность на произвольных бинарных файлах. Репозиторий содержит веса в формате safetensors; лицензия — MIT.

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

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

Ограничения

Заявленная в README длина последовательности — до 4096 токенов, тогда как метаданные указывают нативный контекст 16384 токена; практический режим следует проверять с используемым шаблоном. Качество декомпиляции зависит от входной функции и может не обеспечивать точного восстановления исходного кода.

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

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

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

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

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

Открыть на Hugging Face

1. Introduction of LLM4Decompile

LLM4Decompile aims to decompile x86 assembly instructions into C. The newly released V1.5 series are trained with a larger dataset (15B tokens) and a maximum token length of 4,096, with remarkable performance (up to 100% improvement) compared to the previous model.

2. Evaluation Results

Model/BenchmarkHumanEval-DecompileExeBench
Optimization LevelO0O1O2O3AVGO0O1O2O3AVG
DeepSeek-Coder-6.7B0000000000.0000
GPT-4o0.30490.11590.10370.11590.16010.04430.03280.03970.03430.0378
LLM4Decompile-End-1.3B0.47200.20610.21220.20240.27320.17860.13620.13200.13280.1449
LLM4Decompile-End-6.7B0.68050.39510.36710.37200.45370.22890.16600.16180.16250.1798
LLM4Decompile-End-33B0.51680.29560.28150.26750.34040.18860.14650.13960.14110.1540

3. How to Use

Here is an example of how to use our model (Revised for V1.5). Note: Replace func0 with the function name you want to decompile.

Preprocessing: Compile the C code into binary, and disassemble the binary into assembly instructions.

import subprocess
import os

OPT = ["O0", "O1", "O2", "O3"]
fileName = 'samples/sample' #'path/to/file'
for opt_state in OPT:
    output_file = fileName +'_' + opt_state
    input_file = fileName+'.c'
    compile_command = f'gcc -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()
        if '<'+'func0'+'>:' not in asm: #IMPORTANT replace func0 with the function name
            raise ValueError("compile fails")
        asm = '<'+'func0'+'>:' + asm.split('<'+'func0'+'>:')[-1].split('\n\n')[0] #IMPORTANT replace func0 with the function name
        asm_clean = ""
        asm_sp = asm.split("\n")
        for tmp in asm_sp:
            if len(tmp.split("\t"))<3 and '00' in tmp:
                continue
            idx = min(
                len(tmp.split("\t")) - 1, 2
            )
            tmp_asm = "\t".join(tmp.split("\t")[idx:])  # remove the binary code
            tmp_asm = tmp_asm.split("#")[0].strip()  # remove the comments
            asm_clean += tmp_asm + "\n"
    input_asm = asm_clean.strip()
    before = f"# This is the assembly code:\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)

Decompilation: Use LLM4Decompile to translate the assembly instructions into C:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_path = 'LLM4Binary/llm4decompile-1.3b-v1.5' # V1.5 Model
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path,torch_dtype=torch.bfloat16).cuda()

with open(fileName +'_' + OPT[0] +'.asm','r') as f:#optimization level O0
    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=4000)
c_func_decompile = tokenizer.decode(outputs[0][len(inputs[0]):-1])

with open(fileName +'.c','r') as f:#original file
    func = f.read()

print(f'original function:\n{func}')# Note we only decompile one function, where the original file may contain multiple functions
print(f'decompiled function:\n{c_func_decompile}')

4. License

This code repository is licensed under the MIT License.

5. Contact

If you have any questions, please raise an issue.

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

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

GPU в ailist

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

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

Подбираем GPU…

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

0 моделей