incongruenze tra asm di ida e quello del debugger di psxfin

Aperto da Infrid, Agosto 30, 2017, 13:22:28

Discussione precedente - Discussione successiva

Infrid

ciao a tutti,
sto cercando di usare IDA per fare reverse engineering su una compressione per un gioco psx. Ho impostato il mio bel breakpoint sulla memoria ed analizzato il codice su pSX (psxfin per gli amici), ora vorrei cercare questo codice sull'eseguibile aiutato da ida in modo da avere una visione più chiara delle routine ma mi accorgo che il codice asm è leggermente differente da quello che leggo nell'emulatore, più precisamente sembra che i registri siano chiamati diversamente.

Per caso mi sfugge qualcosa a livello di configurazione per ida? ho provato a cercare nelle opzioni di apertura del file ma non ho trovato nulla che mi aiuti.

es codice psxfin

000afda4: and r10,r24,r12 030c5024
000afda8: addi r10,r10,0x0001 214a0001
000afdac: srly r9,r24,r15 01f84806
000afdb0: addi r9,r9,0x0003 21290003
000afdb4: sub r3,r2,r10 004a1822
000afdb8: lbu r24,0x0000(r3) 90780000
000afdbc: addi r9,159,-0x0001 2129ffff
000afdc0: sb r24,0x0000(r2) a0580000
000afdc4: >addi r3,r3,0x0001 20630001
000afdc8: bgtz r9,0x000afdb8 1d2Offfb <--- valore ricercato in IDA
000afdcc: addi r2,r2,0x0001 20420001
000afdd0: j 0x000afd78 0802bf5e
000afdd4: sll r11,r11,0x01 00065840
000afdd8: 1u5 r12,0x00ff 3c0c00ff
000afddc: 01'1 r12,r12,0xffff 358cffff
000afde0: addi r14,r4,0x0010 208e0010
000afde4: lw r8,0x0008(r4) 8c880008
000afde8: lw r3,0x000c(r4) 8c83000c
000afdec: and r8,r8,r12 010c4024
000afdf0: and r3,r3,r12 006c1824


codice in ida

TEXT:800AFDA8  # ---------------------------------------------------------------------------
TEXT:800AFDA8
TEXT:800AFDA8 loc_800AFDA8:                            # CODE XREF: sub_800AFD30+5Cj
TEXT:800AFDA8                 lhu     $t8, 0($a3)
TEXT:800AFDAC                 addi    $a3, 2
TEXT:800AFDB0                 and     $t2, $t8, $t4
TEXT:800AFDB4                 addi    $t2, 1
TEXT:800AFDB8                 srlv    $t1, $t8, $t7
TEXT:800AFDBC                 addi    $t1, 3
TEXT:800AFDC0                 sub     $v1, $v0, $t2
TEXT:800AFDC4
TEXT:800AFDC4 loc_800AFDC4:                            # CODE XREF: sub_800AFD30+A4j
TEXT:800AFDC4                 lbu     $t8, 0($v1)
TEXT:800AFDC8                 addi    $t1, -1
TEXT:800AFDCC                 sb      $t8, 0($v0)
TEXT:800AFDD0                 addi    $v1, 1
TEXT:800AFDD4                 bgtz    $t1, loc_800AFDC4 <--- risultato della ricerca
TEXT:800AFDD8                 addi    $v0, 1
TEXT:800AFDDC                 j       loc_800AFD84
TEXT:800AFDE0                 sll     $t3, 1
TEXT:800AFDE4  # ---------------------------------------------------------------------------


ovviamente per trovare il codice su ida ho fatto una ricerca per opcode in hex, cercando i valori sull'ultima colonna di psxfin
Citizen Infrid :: raccolta di deliri, opere ed opinioni.
RCP64 :: Nintendo 64 Machine
load word team

Phoenix

Fondamentalmente IDA utilizza dei mnemonici per i nomi dei registri.
Anche il debugger cinese di pcsx usa questa nomenclatura. Infine, IDA semplifica alcune istruzioni usandone delle versioni più compatte come ad esempio addi $v0, 1 al posto di addi $v0, $v0, 1.

Io preferisco la nomenclatura di IDA, in quanto permette di distinguere i registri solitamente dedicati ai paramentri delle funzioni (a0,a1,a2, ecc.) da quelli dedicati ai return (vedi v0) e altra roba.

Phoenix
****************
membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it
*****************************

Infrid

Citizen Infrid :: raccolta di deliri, opere ed opinioni.
RCP64 :: Nintendo 64 Machine
load word team