Pseudo Code:

(*((void (__cdecl **)(_DWORD, _DWORD))cr->baseclass_0.Skills[1]->_vptr.TSkill + 3))(cr->baseclass_0.Skills[1], Mana);

IDA Assembly Code:

.text:0807EC41                 call    dword ptr [mana+0Ch]

I cannot figure to what address is the call going to, and I cannot seem to jump to that either, why is this happening? how can I solve it? I'm very newbie with IDA but I've been managing lately, and I just encountered this one and I'm clueless on what to do.

A bigger view before the call:

.text:0807EC2B loc_807EC2B:                            ; CODE XREF: CheckMana(TCreature *,int,int,int)+EAj
.text:0807EC2B                 mov     Delay, [ebp+Mana_0]
.text:0807EC2E                 test    Delay, Delay
.text:0807EC30                 jle     short loc_807EC44
.text:0807EC32                 mov     Delay, [cr+8]
.text:0807EC35                 mov     edx, [ebp+Mana_0]
.text:0807EC38                 mov     mana, [Delay]
.text:0807EC3A                 mov     [esp], Delay
.text:0807EC3D                 mov     [esp+4], edx
.text:0807EC41                 call    dword ptr [mana+0Ch]

1 Answer 1


From the provided disassembly, mana is a structure and you need to understand this structure and it's members.

The instruction below:

.text:0807EC41                 call    dword ptr [mana+0Ch]

It is invoking the function with pointer stored at offset 0xC in the structure, mana.

Where is the structure mana derived from?

This can also be inferred from the disassembly you have shared.

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.