[Tiptoi] Mehr zu OidMain

Joachim Breitner mail at joachim-breitner.de
Di Nov 24 00:31:04 CET 2020


Hi,

Am Sonntag, den 22.11.2020, 19:30 +0100 schrieb Joachim Breitner via
tiptoi:
> Am Sonntag, den 22.11.2020, 13:09 +0100 schrieb Joachim Breitner via tiptoi:
> > Mein aktuelles Ziel ist es, das Binary durch ein selbst-assembliertes
> > zu ersetzen; erstmal mit gleicher Ausgabe, und dann immer weiter
> > vereinfachen, bis ich das kleinste habe was trotzdem noch tut.
> 
> leider nicht sehr erfolgreich bisher. Zwar stört es den Stift nicht,
> wenn man z.B. APP_DEMO in APPPDEMO im entsprechenden Binary ändert (das
> heißt, es gibt zumindest schon mal keine Integritäts-Prüfung). Aber
> wenn ich das Program einfach direkt beende, also mit
> 
>      bx      lr
> 
> am Anfang, oder auch
> 
>    push    {r4, r5, r6, r7, r8, r9, sl, lr}
>    pop     {r4, r5, r6, r7, r8, r9, sl, pc}
> 
> dann beobachte ich das gleiche als wenn ich das Program einfach lösche:
> Der Stift gibt nach dem Antippen des Anschaltsymbols gar keinen Mux
> mehr von sich.
> 
> Das heißt entweder, die Firmware erwartet von dem Programm, dass es
> einen sinnvollen Rückgabewert hat (aber das Assembly sieht jetzt nicht
> sehr danach aus), oder dass das Programm sonst irgendwas besonderes
> macht, damit der Stift danach weiter funktioniert.

Ich hab es jetzt tatsächlich geschafft, das Binary in eine lesbare
Assembly-Datei zu übertragen, die ich mit arm-none-eabi-as wieder in
ein bit-gleiches Binary übertragen konnte. Das macht es deutlich
einfacher damit rumzuspielen.

Ein gutes Zeichen: Ich konnte darin im
Grunde den ganzen Code verschieben, und es tat weiterhin. Spricht dafür
dass der Einsteigspunkt tatsächlich 0x00 ist.

Jetzt kann ich anfangen Teile aus der Datei zu löschen, bis ich die
kleinste finde, die noch tut…

Ein bisschen Rumgespiele, noch nicht sehr ergiebig. Hatte jetzt schon
binaries, bei denen der Stift crasht; solche, bei denen die Start-
Sounds nicht spielen aber das Buch tut, und solche, bei denen die
ersten Sekundenbruchteile des Start-Sounds in Dauerschleife laufen…

Hmm, so komme ich nicht viel weiter. Also mal den Code tatsächlich
gelesen:

Das Argument (r0) zum Programm wird ziemlich gleich als r4
weggespeichert, und dann nicht mehr beschrieben, aber oft benutzt.
Scheint wichtig zu sein. Alles was damit gemacht wird ist von Offsets
davon aus zu lesen, und zwar kommen viele Offsets von 12 bis 396 vor.
Davon sind einige eindeutig Funktionspointer, die anderen irgendwelche
Arrays… das sieht alles sehr interessant aus, auch wenn ich mir noch
keinen Reim draus mache:

12 // function
24 // function
36 // function
44 // function
48 // function
72 // u16, wird mit 48 verglichen
76 // ptr to u32
80 // ptr to u32, wird mit obigem verglichen
84 // ptr, ziel 2. argument von #44
88 // ptr, ziel 3. argument von #44
96 // ptr, byte, ziel wird nach *sl geschrieben, wenn 0 beendet
100 // ptr, byte, wird geschrieben (von r8, r9)
104 // ptr, byte, wird geschrieben (von r9)
124 // function, argument: r5->4
128 // function, argument: array offset from 288, result compared against 0
136 // function
140 // function, arguments(*h(#288+2*r6), -256, *b(#236+r6), *h(#240+2*r6))
144 // function
148 // function, no args?
156 // function (similar context as 144+148)
164 // function
176 // ptr, ziel 1. argument von #44
188 // ptr, ziel finishes loop around #128
192 // ptr, target used as addition to to *(#288+3*r6), to be writtento *#200
200 // ptr, target above writes to
204 // ptr, wird mit 1 verglichen
228 // arg to #140
232 // arg to #140
236 // arg to #140
240 // arg to #140
244 // ptr, target compared to r5->#301
272 // ptr, target compared to r5->#4
288 // arg to 128
292 // ptr to thing, offset 82 of that read and written to 120
300 // arg to #44
304 // arg to #44
308 // ptr to array or something
312 // ptr to something that gets counted up
396 // function


Das müsste ja eigentlich eine Datenstruktur sein, mit der man
vermutlich den Stift schön steuern kann.

Naja, genug für heute. Mal schauen wann der Groschen fällt.

Cheers,
Joachim


-- 
Joachim Breitner
  mail at joachim-breitner.de
  http://www.joachim-breitner.de/






Mehr Informationen über die Mailingliste tiptoi