Wie kann man in IDA Pro einem Wert einen Namen zuweisen?

OP #6087465
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 
:-)
#6087579
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
#6087745
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
Gast #6087833
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.

;)
OP #6091416
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.
Gast #6091437
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren