asmsense

Kaynak kodu olmayan firmware'i anlayan yerel model. Ölçtüklerimiz.

Ham bir firmware imajında bugünkü araçlar neyi kaçırıyor, kendi küçük modelimiz büyük cloud modellerin neresinde duruyor. Her sayı aynı veride ölçüldü; kaybettiğimiz yerler de burada.

01 · FreeRTOS · Cortex-M7 · 11 KB · kaynak kodu yok

Aynı firmware, iki analiz. Bugünkü araçlar 93 fonksiyonun 52 tanesini göremiyor.

Kaçanlar sıradan fonksiyonlar değil: açılış (Reset, main), görev zamanlayıcısı ve kesmeler. Eksik bilgi, imajın en başındaki vektör tablosunda duruyor.

İlk 64 byte · vektör tablosu
000000 00 02 20c5 24 00 60
0008c1 24 00 60c1 24 00 60
0010c1 24 00 60c1 24 00 60
0018c1 24 00 6000 00 00 00
002000 00 00 0000 00 00 00
002800 00 00 0055 3e 00 60
0030c1 24 00 6000 00 00 00
00389d 3e 00 60f1 3f 00 60
  • 0x20020000 yığın tepesi · RAM
  • 0x600024C4 Reset
  • 0x60003E54 SVC
  • 0x60003E9C PendSV
  • 0x60003FF0 SysTick

İşlemciye "açılınca nereden başla, kesme gelince nereye git" diyen tablo. Pointer'lar Thumb biti yüzünden tek sayı: …c5 → Reset …c4.

Her kare bir fonksiyon, adres sırasıyla · yana kaydır →
Gerçek · kaynak koddan etiket93 / 93Bugün · rbasefind + Ghidra41 / 93asmsense hedefi · doğru base + vektör tablosu85 / 93mainResetxTaskCreateSchedulerSVCPendSVSysTick
bulundukaçtıgerçekte varyanlış alarm: 0 / 0

Base address doğru, ama yetmedi

rbasefind 0x60002000 dedi; dayanağı 2 pointer, ikinci adayın 1. Ghidra yine 52 fonksiyonu kaçırdı.

Kaçanlar cihazın kalbi

Reset, main, xTaskCreate, zamanlayıcı ve SVC, PendSV, SysTick kesmeleri. Analist bunları bugün elle arıyor.

Vektör tablosuyla 85 / 93

Kalan 8 fonksiyonun çoğu görev ve callback; kodda yalnız pointer olarak geçiyor.

02 · 239 imaj · 12 uygulama · 5 Cortex-M çekirdeği · 28,743 fonksiyon

Tek örnek değil. Eksik halka base ve vektör tablosu.

Kaynağı bilinen açık RTOS ve kütüphanelerden, gerçek MCU bellek haritalarıyla derlediğimiz imajlarda her fonksiyonun doğru adresi biliniyor. Ghidra'yı dört koşulda ölçtük.

Fonksiyon tespiti, F1 · çizgi %95 güven aralığı · yana kaydır →
Ghidra tek başına · base bilinmiyor%55Ghidra + rbasefind · bugünkü otomatik zincir%61Ghidra + doğru base%72Ghidra + base + vektör tablosu · asmsense hedefi%92
Hangi fonksiyonlar bulunuyor · ○ bugün → ● base ve vektör tablosu verilince · yana kaydır →
%0%50%100Reset + kesme işleyicileri%2%100Bootloader%6%100C runtime%24%87Uygulama kodu%27%67RTOS + kütüphane%69%89libc / libm%74%87

Bugün ham bir Cortex-M imajında açılış ve kesme kodunun %2'si otomatik bulunuyor; 239 imajın 41'inde base adresi hiç bulunamıyor. Doğru base ve vektör tablosu verilince bu oran %100. Vektör tablosu tek başına +20 puan kazandırıyor [10–34]. Bu bilgiyi otomatik ve güven skoruyla çıkaran modül üzerinde çalışıyoruz; kendi doğruluğu henüz ölçülmedi.

03 · x86-64 · az bilinen 26 projeden aynı 2.000 fonksiyon

Sembolü silinmiş bir fonksiyona ad koymak: kendi 8B modelimiz, büyük cloud modellerin yanında.

Model fonksiyonun adını görmez; makine kodunu, çağrı bağlamını ve Ghidra sözde kodunu görür, bir ad ve iki dilde açıklama üretir. Skor ad token'larının F1'i; "tam", adı birebir bulduğu fonksiyon sayısı.

Ad tahmini, token F1 · yana kaydır →
0.000.050.100.150.20Qwen3-8B, eğitilmemiş8B · lokalbu 2.000 fonksiyonda henüz ölçülmediasmsense v1 · Qwen3-8B + LoRA8B · lokal0.106 25 tamasmsense v5 · + açıklama hedefi8B · lokal0.124 26 tamasmsense v6 · + Ghidra sözde kodu8B · lokal0.135 31 tamDeepSeek v4.1 flash · asm + bağlamcloud0.154 40 tamMiMo v2.6 pro · asm + bağlamcloud0.167 40 tamMiMo v2.6 pro · v6 ile aynı girdicloud0.192 52 tam
%70

Aynı girdiyle büyük cloud modelin skorunun bu kadarı; bizimki 8B ve kendi makinende çalışır.

+%27

v1'den v6'ya. Taban model ve test aynı; değişen veri ve girdi.

%21

Açıklama doğruluğu (otomatik hakem, 294 karar). v5'te %20'ydi.

04 · Gerçek test fonksiyonları

Aynı makine kodu, dört tahmin. Kazandığımız da kaybettiğimiz de.

Girdiden kesit · append_int · -O2
moveax, 0xcccccccd← ÷10 sihirli sayısı
imulrsi, rax
shrrsi, 0x23
orr9b, 0x30← rakam → '0'..'9'
movbyte ptr [rbp + r15 - 0x29], r9b
cmpecx, 0x9
jaloc_2← basamak döngüsü
…
learax, [rsi + rsi]← kapasite × 2
callrealloc← tampon büyüt
…
callmemcpy← sona ekle

Model ad yerine sub_0004 görür. Kanıt satırlarda: 10'a bölme, ASCII rakam, büyüyen tampon, sona kopyalama.

Gerçek ad → tahminler
append_intjson_getsrgb_to_linear
asmsense v1itoalxlsx_reader_worksheet_find_cellsigmoid
asmsense v6append_intjson_object_getsRGB
DeepSeekappend_uint_to_stringlookup_symbol_by_namesaturate
MiMoappend_uint_to_bufferlookup_key_by_namesrgb_to_linear
birebiryakın (F1 ≥ 0,5)ıska

Üçüncüde kaybettik: v6 sRGB eğrisini tanıdı ama dönüşümün yönünü ters okudu; adı MiMo birebir buldu.

Sınırlar

Neyi iddia etmiyoruz.