[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