Forum: Mikrocontroller und Digitale Elektronik Wie kann man in IDA Pro einem Wert einen Namen zuweisen?


von Olli Z. (z80freak)


Lesenswert?

Ich habe in IDA Pro z.b. eine solche Codezeile:
1
ROM:00006648                 LDR     R0, =0xFC0E8000
Jetzt weiss ich das die Adresse 0xFC0E8000 bei der verwendeten MPU laut 
Datenblatt den Symbolnamen "PIM_BASE" hat. Diesen würde ich nun global 
überall ersetzen.
Wenn ich auf dieser Zeile "n" drücke, gebe ich der Adresse 0x6648 einen 
"Namen", was ich aber nicht will.
Jetzt ist der LDR Befehl ja so aufgebaut das der nur den Offset zur 
Speicherstelle mit dem zu ladenden Wert erhält, was von IDA Pro bereits 
durch das Symbol "=0xFC0E8000" ersetzt wurde weil IDA an dem genannten 
Offset die Bytefolge "FC 0E 80 00" gefunden hat.
Gehe ich zu dieser Speicherstelle, indem ich mit "Ctrl-J" mir die 
Crossrefenzen anzeigen lasse siehe ich dies:
1
ROM:000067E0 off_67E0        DCD 0xFC0E8000          ; DATA XREF: ROM:00006648↑r
Nun kann ich zwar den Namen dieser Offset-Adresse mittel "n" von 
"off_67E0" auf "PIM_BASE" ändern, aber dennoch bleibt an obiger Stelle 
die Zeile erhalten wie sie ist.

Scheinbar hab ich hier einen totalen Denkwurm drin und bitte um Hilfe 
:-)

von Thomas Z. (usbman)


Lesenswert?

Da gibt es mehrere Varianten Pimbase deutet auf die Startaddress einer 
Struktur hin
Du könntest also eine passende Struktur erstellen.
Das Umbenennen der Referenz geht mit der rechte Maustaste da kannst 
entweder manuell was ändern oder mit Offset die Pimbase Addresse 
auswählen.

Thomas

von Olli Z. (z80freak)


Lesenswert?

Nein, ist keine Struktur sondern die Mapped-IO Adresse eines 
Mikrocontrollers.

von Thomas Z. (usbman)


Lesenswert?

Nun ja man kann auch IO Addresse auf Strukturen abbilden. Das ist meines 
Wissens bei Arm der übliche Weg. Du kannst natürlich auch jeder IO 
Addresse einen symb. Namen geben, das wird aber schnell unübersichtlich. 
Den Vorteil wirst du sehen sobald du auf Psydo C umschaltest.

Thomas

von . . (Gast)


Lesenswert?

Mach folgendes:
Klick mit der linken Maustatste auf das "=0xFC0E8000", dann drück die 
o-Taste, damit wird bekanntgegeben, das dies nicht nur einfach 
irgendeine Zahl ist, sondern ein Offset. Alle "=0xFC0E8000" wandeln sich 
jetzt in ein Lable auf diese Adresse.

;)

von Olli Z. (z80freak)


Lesenswert?

.                                                . schrieb im Beitrag 
#6087833:
> Mach folgendes:
> Klick mit der linken Maustatste auf das "=0xFC0E8000", dann drück die
> o-Taste, damit wird bekanntgegeben, das dies nicht nur einfach
> irgendeine Zahl ist, sondern ein Offset. Alle "=0xFC0E8000" wandeln sich
> jetzt in ein Lable auf diese Adresse.

Bei "o" passiert bei mir da garnix. Allerdings glaube ich das es schon 
ein offset ist, wird ja auch rot hinterlegt dargestellt.

von . . (Gast)


Lesenswert?

Das liegt daran, dass IDA für die Adresse noch kein Speichersegment 
angelegt hat.
Menü -> Edit -> Segments -> Create segment...
Ein Dialog öffnet sich:
Segment name: Irgendein Name für das Adresssegment zB port_xyz_addr
Start address: Beginn des Segmentes (zB 0xFC0E0000)
End address: Endadresse des Segmentes (zB 0xFC0F0000)
Base: 0x0
Class: leer lassen

32Bit segment anwählen
Häckchen bei "Use sparce storage" (spart Speicher bei großen Segmenten)
OK -> fertig

Nun kannst Du Labels auf diese Adressen vergeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.