Hex disassemblieren mit merkwürdigem Ergebnis

OP Persönliche Seite #1399151
Lesenswert?
• ▲
▼
Hi,
Habe Heute einfach mal ein Assembler Projekt von mir mit  IDA 
disassembliert, und festgestellt das nicht alles gleich ist wie ich es 
im Asm-Sourcecode geschrieben habe. Zum Beispiel wird das Register R19 
benutzt obwohl ich es im Sourcecode nirgendwo benutzt habe. Ein Paar 
Funktionen erkenne ich wieder, und ein paar habe ich noch nie gesehen.
Wie ist das möglich, warum werden andere Register benutzt als im 
Sourcecode angegeben?

Danke
OP Persönliche Seite #1399173
Lesenswert?
• ▲
▼
1
              cpi     r19, 0          ; TWI_
2
ROM:01DF                 sbci    r19, 0x51 ; 'Q'
3
ROM:01E0                 rcall   sub_2C6
4
ROM:01E1                 ldi     r16, 0
5
ROM:01E2                 ldi     r17, -3 ; '²'
6
ROM:01E3                 rcall   sub_2A8
7
ROM:01E4                 rcall   sub_2C6
8
ROM:01E5                 ldi     r16, 0
9
ROM:01E6                 ldi     r17, -0x34 ; '¦'
10
ROM:01E7                 rcall   sub_2A8
11
ROM:01E8                 cpi     r19, 0x10
12
ROM:01E9                 sbci    r20, 0x54 ; 'T'
13
ROM:01EA                 sbci    r20, 0x36 ; '6'
14
ROM:01EB                 sbci    r19, 0x44 ; 'D'
15
ROM:01EC                 sbci    r19, 0x50 ; 'P'
16
ROM:01ED                 sbci    r19, 0x41 ; 'A'
17
ROM:01EE                 cpi     r19, 0
18
ROM:01EF                 sbci    r19, 0x50 ; 'P'
19
ROM:01F0                 ldi     r17, 0x30 ; '0'
20
ROM:01F1                 rcall   sub_2B0
21
ROM:01F2                 ldi     r16, 0
22
ROM:01F3                 ldi     r17, 0x31 ; '1'

also das hier zum Beispiel, im Sourcecode steht davon nichts.
p.s. wo stellt man denn die Optimierung ab?
#1399199
Lesenswert?
• ▲
▼
Christian D. schrieb:
> also das hier zum Beispiel, im Sourcecode steht davon nichts.

Kann ja jeder behaupten.
Wir können es nicht nachprüfen.


> p.s. wo stellt man denn die Optimierung ab?

gibbet nich.
Ein Assembler muß genau das übersetzen, was Du hingeschrieben hast.


Peter
OP Persönliche Seite #1399204
Lesenswert?
• ▲
▼
>> also das hier zum Beispiel, im Sourcecode steht davon nichts.

>Kann ja jeder behaupten.
>Wir können es nicht nachprüfen.
Stimmt wirklich! glaub mir. ich benutze nur r16, r17 und r18. Es können 
also nur die Sachen aus dem Datensegment sein. Kann mir jemand sagen wie 
ich das simulieren kann das ich herausfinde was Code und Daten ist?
Gast #1399232
Lesenswert?
• ▲
▼
In der disassemblierten Liste solltest Du die Darstellung der erzeugten 
Codebytes mit anschalten, nicht nur der Adressen.
Dann wird man vermutlich sehen, daß es sich bei den vermeintlichen 
Programmschritten nach   "rcall   sub_2A8"  um irgendwelche Konstanten 
oder Tabellen etc. handelt.
Evtl. sind es Zahlenkonstanten für die Subraktion.

Noch einfacher ist es, wenn man den Assembler einen "Listfile" erzeugen 
lässt, dann sieht man alles genau und braucht keine separaten 
Disassembler. Diese werden nur bei Analyse von Fremdcode eingesetzt.
#1399265
Lesenswert?
• ▲
▼
Christian D. schrieb:
> Kann mir jemand sagen wie
> ich das simulieren kann das ich herausfinde was Code und Daten ist?

Geht nicht, dazu bräuchte der Disassembler Intelligenz.
Es gibt Disassembler, wo man manuell Codesequenzen ausschließen kann.
Manche Disassembler können auch alle Sprungmarken verfolgen, bis zum 
nächsten unbedingten Sprung oder return. Das geht, solange man keine 
Funktionspointer benutzt.


Aber wenn Du eh den Quellcode hast, dann brauchst Du doch nicht 
disassemblieren, nimm einfach das Assemblerlisting.


Peter
#1399712
Lesenswert?
• ▲
▼
Christian D. schrieb:
 ROM:01E9                 sbci    r20, 0x54 ; 'T'
> ROM:01EA                 sbci    r20, 0x36 ; '6'
> ROM:01EB                 sbci    r19, 0x44 ; 'D'
> ROM:01EC                 sbci    r19, 0x50 ; 'P'
> ROM:01ED                 sbci    r19, 0x41 ; 'A'

Siehst Du, dass die Operanden Text ergeben?  Und so wird es auch mit dem 
Operator sein.  Irgendwo in Deinem Programm steht der String 
...".T.6.D.P.A."... (Die Punkte stehen für weitere Zeichen, da Dein 
Disassembler-Listing leider die Code-Bytes weglässt).

Das kommt einfach heraus, wenn man Strings disassembliert.  Woher soll 
der Disassembler auch wissen, dass das Programm dort selbst nicht 
vorbeikommt, sondern diesen Teil als Daten verwendet?
Persönliche Seite #1399721
Lesenswert?
• ▲
▼
du kannst im IDA die analyze abeim laden bschalten, dann wird IDA 
erstmal z.b. die strings auflisten.

Blocks die wie code aussehen markieren und "C" drücken, dann bekommst du 
auch da code disassembliert wo code drin ist - im string fenster die 
addressen vergleichen damit du keine string disassemblierst.

IDA ist schon super, allerdings falls du wirklich die lizenz gekauft 
hast solltest du es wissen :)
#1400193
Lesenswert?
• ▲
▼
>> ROM:01E9                 sbci    r20, 0x54 ; 'T'
>> ROM:01EA                 sbci    r20, 0x36 ; '6'
>> ROM:01EB                 sbci    r19, 0x44 ; 'D'
>> ROM:01EC                 sbci    r19, 0x50 ; 'P'
>> ROM:01ED                 sbci    r19, 0x41 ; 'A'

Ich werfe mal folgende Version ins Rennen:

Struktur des sbci-Befehls:
    0100  KKKK  dddd  KKKK
Befehle analysiert:
ROM:01E9                 sbci    r20, 0x54 ; 'T'
    0100  0101  0100  0100 = 0x4544 = 'E','D'

ROM:01EA                 sbci    r20, 0x36 ; '6'
    0100  0011  0100  0110 = 0x4346 = 'C','F'

ROM:01EB                 sbci    r19, 0x44 ; 'D'
    0100  0100  0011  0100 = 0x4434 = 'D','.'

ROM:01EC                 sbci    r19, 0x50 ; 'P'
    0100  0101  0011  0000 = 0x4530 = 'E','0'

ROM:01ED                 sbci    r19, 0x41 ; 'A'
    0100  0100  0011  0001 = 0x4431 = 'D','1'

ASCII-Folge also 'EDCFD.E0D1'

Reinhard

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.