Neuronová dekompilace
PRAMEN

Z assembleru
zpátky do C.

Pramen je můj neuronový dekompilátor pro Windows a MS-DOS. Z assembleru jedné funkce navrhne čitelný kód v C. Natrénoval jsem ho od nuly, jen na assembleru a C.

parametrů
223 M
trénovacích párů ASM → C
5,26 M
bitů · DOS a Windows
16 / 32 / 64
váhy modelu a kód
Apache-2.0
01 / Ukázka

Jedna funkce. Znovu čitelná.

Skutečný uložený výstup modelu pro délku řetězce. Tato varianta podle testů v repozitáři prošla; nejde o živou dekompilaci v prohlížeči.

Assembler → Cmsvc-x86-O2
Vstup · assembler
MOV ECX,dword ptr [ESP + 4]
MOV EAX,ECX
CMP byte ptr [ECX],0
JE LAB_1
NOP dword ptr [EAX + EAX]
LAB_2:
INC EAX
CMP byte ptr [EAX],0
JNE LAB_2
LAB_1:
SUB EAX,ECX
RET
Výstup · Pramen
size_t strlen(const char *str)
{
 const char *p = str;
 while (*p)
  p++;
 return p - str;
}
Prošlo testy dle repozitářeUložená ukázka · délka řetězce ↗

Výstup je návrh. Názvy si model vymýšlí, typy odhaduje a logiku je potřeba ověřit. Původní zdrojový kód z binárky doslova neobnoví.

02 / Platformy

Od DOSu po Windows x64.

Šest variant pro konkrétní překladače a jejich optimalizace. Vstup z dumpbin, wdis nebo Ghidry zpracuje přiložený normalizátor.

MSVC 19.36

Windows x64

64bitový kód bez optimalizací i s /O2.

msvc-x64-Od / msvc-x64-O2
MSVC 19.36

Windows x86

32bitový kód s konvencí cdecl, bez optimalizací i s /O2.

msvc-x86-Od / msvc-x86-O2
Open Watcom V2

MS-DOS

16bitový reálný režim: small bez optimalizací a large s far calls a -ox.

dos16-small-od / dos16-large-ox
03 / HumanEval-C

Jak si model vede.

Úloha se počítá jako vyřešená, pokud vygenerované C projde překladem i původními testy. Benchmark HumanEval-C je přeložen stejnými nástroji jako trénovací data.

Greedy decoding, nejvýše 600 nových tokenů. Optimalizovaný kód je výrazně těžší; časté chyby jsou v typech parametrů a názvech pomocných funkcí. Pro msvc-x86-O2 model card výsledek neuvádí.

Metodika a výsledky ↗
Podíl úloh, které prošly testy
VariantaÚlohÚspěšnost
msvc-x64-Od16740,7 %
msvc-x64-O216713,2 %
msvc-x86-Od16732,3 %
dos16-small-od16330,1 %
dos16-large-ox16311,7 %
04 / Trénink

Malý model, konkrétní úkol.

Decoder-only transformer ve stylu GPT-2: 16 vrstev, 16 attention heads, kontext 4 096 tokenů a vlastní tokenizer se slovníkem 16 384 tokenů.

Základ tvoří 5,26 milionu párů assembler → C z ExeBench (2,33 miliardy tokenů), přeložených šesti způsoby a deduplikovaných. Trénink doplňuje 3,5 miliardy tokenů zdrojového kódu C/C++.

Pramen zpracovává jednu funkci po druhé, přibližně do 3 500 vstupních tokenů. Jiné překladače než MSVC 19.36 a Open Watcom V2 jsou mimo trénovací distribuci. Globální proměnné a struktury vidí jen jako adresy a offsety.

Vyzkoušejte lokálně

Váhy, kód i ukázky.

Stáhněte model a spusťte Python webové rozhraní na 127.0.0.1:8780. GPU je doporučená; na CPU model funguje, ale pomalu.

Dokumentace na Hugging Face ↗
pip install huggingface_hub
hf download radix16/pramen --local-dir pramen
cd pramen
pip install -r requirements.txt
python -m pramen.web

Použijte dodaný Python runtime. Vlastní tokenizer není kompatibilní s běžným textovým vstupem llama.cpp / LM Studio.

Zdroj: model card a ukázky Pramenu, stav k 6. 10. 2026. Váhy a kód: Apache-2.0. Trénovací zdroje si ponechávají původní licence a zahrnují i GPL-2.0; podrobnosti jsou v repozitáři modelu.