This is not mine code. I googled it somewhere.
C++:
static __forceinline uintptr_t getCallAddress(const uintptr_t address)
{
if (address == 0)
return 0;
unsigned char buffer[5];
memcpy(buffer, (void const*)address, 5);
intptr_t *addr = (intptr_t*)(buffer + 1);
*addr += (address + sizeof(buffer));
return *addr;
}