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.
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.
- 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.
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.
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.
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.
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ı.
Aynı girdiyle büyük cloud modelin skorunun bu kadarı; bizimki 8B ve kendi makinende çalışır.
v1'den v6'ya. Taban model ve test aynı; değişen veri ve girdi.
Açıklama doğruluğu (otomatik hakem, 294 karar). v5'te %20'ydi.
Aynı makine kodu, dört tahmin. Kazandığımız da kaybettiğimiz de.
Model ad yerine sub_0004 görür. Kanıt satırlarda: 10'a bölme, ASCII rakam, büyüyen tampon, sona kopyalama.
append_int | json_get | srgb_to_linear | |
|---|---|---|---|
| asmsense v1 | itoa | lxlsx_reader_worksheet_find_cell | sigmoid |
| asmsense v6 | append_int | json_object_get | sRGB |
| DeepSeek | append_uint_to_string | lookup_symbol_by_name | saturate |
| MiMo | append_uint_to_buffer | lookup_key_by_name | srgb_to_linear |
Üçüncüde kaybettik: v6 sRGB eğrisini tanıdı ama dönüşümün yönünü ters okudu; adı MiMo birebir buldu.
Neyi iddia etmiyoruz.
- 01–02'deki firmware imajları sentetik: kaynağı bilinen açık kodla derlendi. Gerçek saha firmware'ine genelleme henüz ölçülmedi.
- "Base ve vektör tablosu verilince" değerleri, Ghidra'ya bu bilgi doğru olarak verildiğinde ölçülen üst sınır. Bunu otomatik çıkaran modülümüzün kendi doğruluğu sonraki ölçüm.
- Güven aralıkları uygulama birimi bazında bootstrap; 12 birim olduğu için geniş.
- Ad tahmininde v6, küçük kontrol kümesinde (eval_115) v5'in gerisinde kaldı (0,135 / 0,155). Ad hedeflerimiz (0,14 / 0,17) ve %25 açıklama hedefi tutmadı.
- Açıklama skoru otomatik hakemle verildi, insan onaylı değil. Eğitilmemiş Qwen3-8B bu kümede henüz ölçülmedi.