1

I hope there is a proper way to fix my issue.

Here's memory layout:

.data:004F3D10     char * * gTownObjNames dd offset aMage  ; DATA XREF: townManager::SetupTown(void)+245↑r
.data:004F3D10                     dd offset aThie         ; "mage" ...
.data:004F3D10                     dd offset aTvrn
<<<SKIPPED>>>
.data:004F3D10                     dd offset aExt3
.data:004F3D90     ; signed __int8 gDwellingType[6][12]
.data:004F3D90     signed char (* gDwellingType)[12] db 0, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 255, 11, 12, 14, 15
.data:004F3D90                                             ; DATA XREF: recruitUnit::recruitUnit(town *,int,int)+49↑r
.data:004F3D90                                             ; QuickViewRecruit(town *,int)+1C↑r ...
.data:004F3D90                     db 17, 19, 13, 255, 16, 18, 255, 255, 20, 21, 23, 25, 27
<<<SKIPPED>>>

and the problematic instruction:

movsx   eax, byte ptr [ecx+eax*4+4F3D7Dh]

that was converted to

movsx   eax, byte ptr (char * * gTownObjNames+6Dh)[ecx+eax*4]

I guess IDA Pro chose gTownObjNames because 4F3D7Dh belongs to gTownObjNames. But I know for the fact that it always points to gDwellingType. Is it possible to change the mapped variable?

Maybe there is a way to use manual operand fix in Pseudocode window?

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.