rlwinm Knoten im Kopf

OP #7906084
Lesenswert?
• ▲
▼

Ich versuche gerade hier durchzusteigen, aber so wie der Disassembler das präsentiert, müsste doch alles nach links rausgeshiftet werden (<<32). oder ist das lediglich eine komische schreibweise was Ghidra da raushaut? welche bits werden maskiert? Mir raucht der Kopf!

1
ulonglong can_check_permission_FUN_000b90a8(void)
2

3
{
4
  return ((ulonglong)can_chk_perm_DAT_40000cbd << 32) >> 35;
5
}

Assembler:

1
**************************************************************
2
*                          FUNCTION                          *
3
**************************************************************
4
             undefined can_check_permission_FUN_000b90a8()
5
                               assume r13 = 0x40008004
6
             undefined         <UNASSIGNED>   <RETURN>
7
             undefined4        Stack[0x4]:4   local_res4              
8
             undefined4        Stack[-0x10]:4 local_10
9
                             can_check_permission_FUN_000b90a8                
10
        000b90a8 94 21 ff f0     stwu       r1,DAT_fffffff0(r1) 
11
        000b90ac 7c 08 02 a6     mfspr      r0,LR
12
        000b90b0 90 01 00 14     stw        r0,local_res4(r1)
13
        000b90b4 3d 80 40 00     lis        r12,0x4000
14
        000b90b8 88 6c 0c bd     lbz        r3,offset can_chk_perm_DAT_40000cbd(r12)
15
        000b90bc 54 63 ee fe     rlwinm     r3,r3,0x1d,0x1b,0x1f
16
        000b90c0 80 01 00 14     lwz        r0,local_res4(r1)
17
        000b90c4 7c 08 03 a6     mtspr      LR,r0
18
        000b90c8 38 21 00 10     addi       r1,r1,0x10
19
        000b90cc 4e 80 00 20     blr

ISA-Manual_ https://www.nxp.com/docs/en/user-guide/BOOK_EUM.pdf https://math-atlas.sourceforge.net/devel/assembly/ppc_isa.pdf

(Firma: 1984now) #7906580
Lesenswert?
• ▲
▼

Flip B. schrieb:

Ich versuche gerade hier durchzusteigen, aber so wie der Disassembler das präsentiert, müsste doch alles nach links rausgeshiftet werden (<<32).

Nein, wird ja auf ulonglong gecastet. Effektiv passiert hier wohl nix anderes als:

return (ulonglong)(can_chk_perm_DAT_40000cbd >> 3);

Warum ghidra das so komisch dekompiliert hat erschließt sich mir allerdings auch nicht wirklich. Allerdings habe ich mit PPC auch Null Erfahrung. Hatte ich nie mit zu tun.

(Firma: 1984now) #7906684
Lesenswert?
• ▲
▼

Detlef W. schrieb:

Mit dem hin- und her-shiften werden auch die oberen 32 Bit genullt.

Nein, das passiert im "Original" schon allein dadurch, dass die wohl 32bittige Variable auf 64Bit erweitert wird, bevor an ihr überhaupt rumhantiert wird. Hätte sie von vonherein 64Bit, müsste der Assemblercode ganz anders aussehen. Und dann würde auch das Ergebnis der des ghidra-Decompilers ganz anders aussehen.

#7909286
Lesenswert?
• ▲
▼

Dass bei PowerPC (Big Endian) Bit 0 msb und Bit 63 lsb ist, macht die Sache nicht unbedingt einfach. Man muss halt dazu wissen, dass can_chk_perm_DAT_40000cbd eine 8-Bit Variable ist. Darauf deutet auch das "lbz r3..." hin.

Also:

  • Die unteren 32 Bits von R3 (32..63) werden um 0x1d = 29 nach links rotiert, das entspricht um 3 nach rechts.

  • Die Maske geht von Bit 0x3B bis 0x3F, ist also 0x1F. Das sind die restlichen 5 Bits die übrig bleiben, wenn ein Byte um 3 nach rechts verschoben wird.

  • Die oberen 32 Bits werden durch das lbz auf 0 gesetzt und dann nicht mehr angerührt,da durch rlwinm nur die unteren 32 Bits (32..63) beeinflusst werden.

Jörg

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.