[Tiptoi] Mehr zu OidMain
Joachim Breitner
mail at joachim-breitner.de
Di Nov 24 18:19:43 CET 2020
Hi,
Am Dienstag, den 24.11.2020, 08:59 +0100 schrieb Ulrich Sibiller via
tiptoi:
>
> Kannst du den Source in github ablegen? Dann kann man sich die Arbeit
> besser aufteilen und einzelne Funktionen analysieren. Nicht, dass ich
> Zeit hätte, aber Interesse schon ;-)
gern:
https://github.com/nomeata/tiptoi-arm-investigation
> > 96 // ptr, byte, ziel wird nach *sl geschrieben, wenn 0 beendet
>
> Was heisst das, "wenn 0 beendet"?
x0590: ldr r0, [r4, #96] @ 0x60x0594: ldrb r0, [r0]
x0598:
strb r0, [sl]
x059c: cmp r0, #0
x05a0: popeq {r4, r5, r6, r7,
r8, r9, sl, pc}
also in C:
uint8 b = *(r4+96);
*sl = b;
if (b == 0) return
> > 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))
>
> Bitte erläutere mal, damit wir uns über die Nomenklatur und Syntax
> einig sind.
Das waren halb-12-abends Notizen, die sind alle noch recht wild. Ich
glaube die sind weniger hilfreich als der Assembly-Code in
https://github.com/nomeata/tiptoi-arm-investigation/blob/main/OidMain.txt
> Ich hab da Vermutungen, aber stimmen die?
> - #288 heisst "Inhalt des Speicheroffsets 288?
Ja, relative zur an das Programm übergebene Adresse. Das Programm kann
man sich wohl als Funktion
type foo = struct { … viele Felder … }
main(foo *arg) { … }
vorstellen.
> - b heisst "Byte"?
> - h heisst "halfword"? Wieviel Bit hat das dann?
Genau! 8 bzw. 16, default ist 32. Diese Buchstaben kommen auch im ARM-
Assembly vor (ldr, ldrh, ldrb).
> - * heisst Inhalt der Speicherstelle?
Ja, C-style pointer-derefernzierung.
> Desweiteren finde ich den Wert -256 irgendwie verdächtig. ubyte get
> von -128 bis + 127, also ein bit mehr oder wie?
Das ist der Code:
x077c: cmp r1, #65280 @ 0xff00
x0780: bne x07b0
…
x07a4: ldr ip, [r4, #140] @ 0x8c
x07a8: blx ip
Also der Aufruf passiert nur, wenn in r1 0xff00 steht.
Die Interpretation als -256 (bei int16) ist vielleicht gewagt.
> #288 ist wohl ein sehr wichtiges Array, vermutlich entweder die
> Register oder sogar die Playlist. Oder alles zusammen. Wir haben #288
> + r6, #288 + 2xr6 und #288+3xr6, also stecken da wohl mindestens 3
> Infos pro Offset drin.
> Man müsste irgendwie an den Inhalt rankommen, da würde extrem
> weiterhelfen. Kannst du mal schnell Code hinzufügen, der den Inhalt
> laut vorliest? Oder auf den Stick dumpt? ;-)
Ja, hatte den Code, schon, aber dann war der Rand dieser e-Mail zu
schmal.
Weitere Diskussion vielleicht vielleicht in
https://github.com/nomeata/tiptoi-arm-investigation/
irgendwie, um hier nicht alle zuzuspammen.
Cheers,
Joachim
--
Joachim Breitner
mail at joachim-breitner.de
http://www.joachim-breitner.de/
Mehr Informationen über die Mailingliste tiptoi