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?