Uso básico del desensamblador ps2dis

Publicada el ps2

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…