/ Модель

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

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

llm4decompile-6.7b-v1.5

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

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

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

Бенчмарки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LLM4Decompile-6.7B-v1.5 — языковая модель семейства Llama, разработанная проектом LLM4Binary для преобразования инструкций ассемблера x86 в код на C. Модель содержит 6,6 млрд параметров, распространяется в формате safetensors и рассчитана на контекст до 8192 токенов по метаданным. Версия V1.5 обучена на наборе данных объёмом 15 млрд токенов; в README указан максимальный размер последовательности обучения 4096 токенов.

Модель предназначена для декомпиляции функций и анализа дизассемблированного кода. Её можно применять для восстановления читаемого исходного кода C из x86-ассемблера, в том числе при работе с бинарными файлами и задачами обратной разработки. Для корректного применения следует передавать инструкции функции и при необходимости заменять func0 на её фактическое имя.

README сообщает об оценке на HumanEval-Decompile и ExeBench и заявляет улучшение до 100% относительно предыдущей версии, но приведённая карточка не содержит полных результатов таблицы. Поддерживаемый языковой профиль явно не описан; целевой выход — код на C. Модель распространяется по лицензии MIT.

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

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

Ограничения

Назначение модели ограничено преобразованием инструкций x86 в C; README не приводит полные результаты бенчмарков, поэтому заявленное улучшение нельзя оценить по доступным данным. Указанный в README предел последовательности обучения — 4096 токенов, тогда как метаданные каталога задают нативный контекст 8192 токена.

Для каких профессий подходит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-6.7b-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
Ревизия весов
618bfcc

0 моделей