static inline UINT32 GetFileOffset( const void* pointer, const SChunk& chunk ) { mxASSERT(ContainsAddress(chunk, pointer)); const UINT32 relativeOffset = mxGetByteOffset32( chunk.data, pointer ); const UINT32 absoluteOffset = chunk.offset + relativeOffset; return absoluteOffset; }
uint32_t CDynPatcher::GetVFuncOffset(void **VTable, void *FuncAddr) { void *VFuncAddr; int i = 0; int ret=-1; VFuncAddr = VTable[i]; while (ContainsAddress(VFuncAddr)) { if (VFuncAddr == FuncAddr) { ret=i; printf("Vfunc [%i]=%p\n", i, VFuncAddr); } else { printf("Vfunc %i=%p\n", i, VFuncAddr); } i++; VFuncAddr = VTable[i]; } return ret; }