/ Модель

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

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

llm4decompile-6.7b-nsp

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

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

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

Бенчмарки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LLM4Decompile-6.7B-NSP — модель семейства Llama, дообученная командой LLM4Decompile на DeepSeek-Coder для преобразования инструкций x86 assembly в код на C. Для обучения использовались 4 млрд токенов пар assembly–C, скомпилированных из AnghaBench. Модель принимает текст с ассемблерным кодом и генерирует текст с восстановленным исходным кодом; в README указана средняя доля повторного выполнения около 0,17 для версии NSP.

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

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

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

Ограничения

Средняя доля повторного выполнения для NSP в README составляет около 0,17; точность восстановления зависит от уровня оптимизации компиляции. Сгенерированный код следует проверять, поскольку он может не совпадать с оригиналом.

Для каких профессий подходит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 NSP model is trained with assembly code, the average re-executability is arond 0.17.

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-nsp'
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
Ревизия весов
017c7d5

0 моделей