Registrarse

[RH - ASM] Offset de special

Estado
Cerrado para nuevas respuestas.

Ancer

Usuario de oro
Hola alguien sabe los offeset de los special

O su función interna es decir no lo que hace sino como lo hace
 

Inferno

Miembro insignia
Miembro insignia
Hola alguien sabe los offeset de los special

O su función interna es decir no lo que hace sino como lo hace
Existe una tabla donde están almacenados todos los specials, dicha tabla, en FR, está en el offset 0x15FD60, ahora bien, si lo que quieres buscar es el offset donde está ubicado X special lo único que tienes que hace es multiplicar el special por 4 y añadir ese resultado a la dirección de la tabla de los specials, algo así:
Código:
(special * 4) + 15FD60 
Ejemplo con el special 0xF5: (F5 * 4) + 15FD60 = 160134
Una vez haces esto abres tu ROM con el editor hexadecimal y buscas ese offset:



Lo que obtendrás será un pointer donde está guardada la función del special, en este caso es 0x0E72B8 (recuerda que al ser un pointer le tienes que quitar -1, es decir, originalmente es 0x0E72B9 pero al restarle 1 te queda 0xE72B8).
Ahora para adentrarte más en él y saber que hace necesitarás un disassembler, como el IDA PRO, una vez tienes el pointer los pasos son más sencillos. Te dejo por aquí un tutorial sobre el IDA que seguro que te sirve de ayuda.

Para responder un poco más a tu pregunta, decirte que los specials son básicamente como unos callasm, si haces lo que te he dicho y abres el special con un disassembler verás que en ese pointer lo que hay es una rutina ASM.

Te puse el ejemplo del special 0xF5 porque es uno de los que tengo imágenes de como se vería abierto desde el IDA, ya que lo he usado en otro tema, para que veas un poco como sería:
Código:
ROM:080E72B8 @ =============== S U B R O U T I N E =======================================
ROM:080E72B8
ROM:080E72B8
ROM:080E72B8 sub_80E72B8:
ROM:080E72B8                 PUSH            {R4-R7,LR}
ROM:080E72BA                 LDR             R0, =dword_300500C
ROM:080E72BC                 LDR             R0, [R0]
ROM:080E72BE                 LDR             R1, =0x55C
ROM:080E72C0                 ADDS            R0, R0, R1
ROM:080E72C2                 LDRB            R0, [R0]
ROM:080E72C4                 LSLS            R0, R0, #0x1F
ROM:080E72C6                 LSRS            R0, R0, #0x1F
ROM:080E72C8                 MOVS            R1, R0
ROM:080E72CA                 MOVS            R7, #0x44
ROM:080E72CC                 CMP             R1, #0
ROM:080E72CE                 BEQ             loc_80E72D2
ROM:080E72D0                 MOVS            R7, #0x45
ROM:080E72D2
ROM:080E72D2 loc_80E72D2:                            @ CODE XREF: sub_80E72B8+16j
ROM:080E72D2                 LDR             R4, =word_20370D0
ROM:080E72D4                 MOVS            R0, #0
ROM:080E72D6                 STRH            R0, [R4]
ROM:080E72D8                 MOVS            R0, R1
ROM:080E72DA                 BL              sub_80E7188
ROM:080E72DE                 LSLS            R0, R0, #0x10
ROM:080E72E0                 LSRS            R0, R0, #0x10
ROM:080E72E2                 CMP             R0, #0x37
ROM:080E72E4                 BLS             loc_80E7320
ROM:080E72E6                 MOVS            R5, #0
ROM:080E72E8                 ADDS            R6, R4, #0
ROM:080E72EA
ROM:080E72EA loc_80E72EA:                            @ CODE XREF: sub_80E72B8+66j
ROM:080E72EA                 LDR             R0, =dword_300500C
ROM:080E72EC                 LDR             R0, [R0]
ROM:080E72EE                 LDR             R1, =0x56D
ROM:080E72F0                 ADDS            R0, R0, R1
ROM:080E72F2                 ADDS            R0, R0, R5
ROM:080E72F4                 LDRB            R0, [R0]
ROM:080E72F6                 SUBS            R0, #1
ROM:080E72F8                 MOVS            R1, #0x64
ROM:080E72FA                 MULS            R1, R0
ROM:080E72FC                 LDR             R0, =unk_2024284
ROM:080E72FE                 ADDS            R4, R1, R0
ROM:080E7300                 MOVS            R0, R4
ROM:080E7302                 MOVS            R1, R7
ROM:080E7304                 BL              sub_803FBE8
ROM:080E7308                 CMP             R0, #0
ROM:080E730A                 BNE             loc_80E731A
ROM:080E730C                 MOVS            R0, #1
ROM:080E730E                 STRH            R0, [R6]
ROM:080E7310                 MOVS            R0, R4
ROM:080E7312                 MOVS            R1, R7
ROM:080E7314                 MOVS            R2, R6
ROM:080E7316                 BL              sub_804037C
ROM:080E731A
ROM:080E731A loc_80E731A:                            @ CODE XREF: sub_80E72B8+52j
ROM:080E731A                 ADDS            R5, #1
ROM:080E731C                 CMP             R5, #2
ROM:080E731E                 BLE             loc_80E72EA
ROM:080E7320
ROM:080E7320 loc_80E7320:                            @ CODE XREF: sub_80E72B8+2Cj
ROM:080E7320                 LDR             R0, =word_20370D0
ROM:080E7322                 LDRH            R0, [R0]
ROM:080E7324                 CMP             R0, #0
ROM:080E7326                 BEQ             loc_80E732E
ROM:080E7328                 MOVS            R0, #0x2A
ROM:080E732A                 BL              sub_8054E90
ROM:080E732E
ROM:080E732E loc_80E732E:                            @ CODE XREF: sub_80E72B8+6Ej
ROM:080E732E                 POP             {R4-R7}
ROM:080E7330                 POP             {R0}
ROM:080E7332                 BX              R0
ROM:080E7332 @ End of function sub_80E72B8
ROM:080E7332
ROM:080E7332 @ ---------------------------------------------------------------------------
ROM:080E7334 off_80E7334:    .long dword_300500C     @ DATA XREF: sub_80E72B8+2r
ROM:080E7334                                         @ sub_80E72B8:loc_80E72EAr
ROM:080E7338 dword_80E7338:  .long 0x55C             @ DATA XREF: sub_80E72B8+6r
ROM:080E733C off_80E733C:    .long word_20370D0      @ DATA XREF: sub_80E72B8:loc_80E72D2r
ROM:080E733C                                         @ sub_80E72B8:loc_80E7320r
ROM:080E7340 dword_80E7340:  .long 0x56D             @ DATA XREF: sub_80E72B8+36r
ROM:080E7344 off_80E7344:    .long unk_2024284       @ DATA XREF: sub_80E72B8+44r

Espero que te haya servido de ayuda.
 
Estado
Cerrado para nuevas respuestas.
Arriba