Uso básico del desensamblador ps2dis

Ps2dis es un desensamblador diseñado especialmente para los programas de ps2. Con este programa podremos obtener el código en ensamblador de cualquier ejecutable de PlayStation 2 (elf o irx).

El código resultante no podremos recompilarlo. Tampoco podremos extraer el código fuente en lenguaje de alto nivel, en el que fue programado realmente. Pero nos puede ser de utilizad para realizar pequeñas modificaciones como trucos, o alteraciones de cualquier otro tipo.

Para intentar identificar que hace cada parte de código o cual es la parte que queremos modificar se utilizan las etiquetas. Puedes abrir la lista de etiquetas desde el menú Edición > Saltar a etiqueta o pulsando Ctrl+G.

Imagen

En esta ventana aparecerán las etiquetas que haya creado el analizador y las que hayas definido.

Una vez que hayas encontrado una etiqueta relacionada con la parte del programa que quieres modificar, haz doble clic sobre ella y te llevara a la parte del código que estabas buscando. Para encontrar la zona exacta que tienes que modificar puedes seleccionar la etiqueta con la tecla espacio y pulsando F3 te llevara a sus referencias.

A partir de ahí solo queda paciencia e intentar entender el código.

Lista de instrucciones:

ADD — Add
Description: Adds two registers and stores the result in a register
Operation: $d = $s + $t; advance_pc (4);
Syntax: add $d, $s, $t
Encoding: 0000 00ss ssst tttt dddd d000 0010 0000
ADDI — Add immediate
Description: Adds a register and a signed immediate value and stores the result in a register
Operation: $t = $s + imm; advance_pc (4);
Syntax: addi $t, $s, imm
Encoding: 0010 00ss ssst tttt iiii iiii iiii iiii
ADDIU — Add immediate unsigned
Description: Adds a register and an unsigned immediate value and stores the result in a register
Operation: $t = $s + imm; advance_pc (4);
Syntax: addiu $t, $s, imm
Encoding: 0010 01ss ssst tttt iiii iiii iiii iiii
ADDU — Add unsigned
Description: Adds two registers and stores the result in a register
Operation: $d = $s + $t; advance_pc (4);
Syntax: addu $d, $s, $t
Encoding: 0000 00ss ssst tttt dddd d000 0010 0001
AND — Bitwise and
Description: Bitwise ands two registers and stores the result in a register
Operation: $d = $s & $t; advance_pc (4);
Syntax: and $d, $s, $t
Encoding: 0000 00ss ssst tttt dddd d000 0010 0100
ANDI — Bitwise and immediate
Description: Bitwise ands a register and an immediate value and stores the result in a register
Operation: $t = $s & imm; advance_pc (4);
Syntax: andi $t, $s, imm
Encoding: 0011 00ss ssst tttt iiii iiii iiii iiii
BEQ — Branch on equal
Description: Branches if the two registers are equal
Operation: if $s == $t advance_pc (offset = 0 advance_pc (offset = 0 $31 = PC + 8 (or nPC + 4); advance_pc (offset 0 advance_pc (offset > h; advance_pc (4);
Syntax: sra $d, $t, h
Encoding: 0000 00– —t tttt dddd dhhh hh00 0011
SRL — Shift right logical
Description: Shifts a register value right by the shift amount (shamt) and places the value in the destination register. Zeroes are shifted in.
Operation: $d = $t >> h; advance_pc (4);
Syntax: srl $d, $t, h
Encoding: 0000 00– —t tttt dddd dhhh hh00 0010
SRLV — Shift right logical variable
Description: Shifts a register value right by the amount specified in $s and places the value in the destination register. Zeroes are shifted in.
Operation: $d = $t >> $s; advance_pc (4);
Syntax: srlv $d, $t, $s
Encoding: 0000 00ss ssst tttt dddd d000 0000 0110
SUB — Subtract
Description: Subtracts two registers and stores the result in a register
Operation: $d = $s – $t; advance_pc (4);
Syntax: sub $d, $s, $t
Encoding: 0000 00ss ssst tttt dddd d000 0010 0010
SUBU — Subtract unsigned
Description: Subtracts two registers and stores the result in a register
Operation: $d = $s – $t; advance_pc (4);
Syntax: subu $d, $s, $t
Encoding: 0000 00ss ssst tttt dddd d000 0010 0011
SW — Store word
Description: The contents of $t is stored at the specified address.
Operation: MEM[$s + offset] = $t; advance_pc (4);
Syntax: sw $t, offset($s)
Encoding: 1010 11ss ssst tttt iiii iiii iiii iiii
SYSCALL — System call
Description: Generates a software interrupt.
Operation: advance_pc (4);
Syntax: syscall
Encoding: 0000 00– —- —- —- —- –00 1100
XOR — Bitwise exclusive or
Description: Exclusive ors two registers and stores the result in a register
Operation: $d = $s ^ $t; advance_pc (4);
Syntax: xor $d, $s, $t
Encoding: 0000 00ss ssst tttt dddd d— –10 0110
XORI — Bitwise exclusive or immediate
Description: Bitwise exclusive ors a register and an immediate value and stores the result in a register
Operation: $t = $s ^ imm; advance_pc (4);
Syntax: xori $t, $s, imm
Encoding: 0011 10ss ssst tttt iiii iiii iiii iiii

Adjunto el ultimo ps2dis traducido al español. por mucho que lo he buscado no lo encuentro asique como no me ponga a traducirlo otra vez….