/ Модель

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

Контекст
16 384 токена
Параметры
33,1 млрд
Размер весов
66,7 ГБ
Лицензия
MIT
Архитектура
llama · dense
Опубликована
28 фев 2024

llm4decompile-33b

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

Модель на 33,1 млрд параметров, дообученная для декомпиляции инструкций x86 в ассемблере в исходный код на C.

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

Бенчмарки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LLM4Decompile-33B — языковая модель для преобразования инструкций x86 в ассемблере в исходный код на C. Модель разработана авторами проекта LLM4Decompile и дообучена на DeepSeek-Coder на 4 млрд токенов пар «ассемблер — C», полученных компиляцией кода из AnghaBench. В метаданных указаны архитектура Llama, 33,1 млрд параметров и контекст длиной 16 384 токена.

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

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

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

Ограничения

Сгенерированный код может не компилироваться или не сохранять поведение исходного бинарного файла; приведённые в README оценки показывают зависимость результатов от уровня оптимизации. Модель ориентирована на инструкции x86 и генерацию кода C.

Для каких профессий подходит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.

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-33b' #note: it may need multi-gpu support
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
Ревизия весов
054f1b6

0 моделей