
Originally Posted by
luizimloko
Code:
pIntersectSegment = (IntersectSegment)(*(DWORD*)(0x641480));
esse tipo de função no caso do intersectsegment é um wrapper que você usa a própria função do jogo.
Não faz diferença se é um wrapper ou não, chamar uma função não tem segredo, você descobre o endereço da função a convenção de chamada e os argumentos usados.
Contanto que os 3 passos estejam corretos não pode ocorrer o crash, isso claro se o game não adicionar proteções adicionais como checar o endereço de retorno ou usar TLS tricks.
Olhando o código novamente notei outro erro.
Code:
typedef bool(*IntersectSegment)(const IntersectQuery& Query, IntersectInfo *pInfo);
Mesmo que o VisualStudio use como padrão a convenção de chamada __cdecl, que é o mesmo que essa função usa, pode ser que esteja setado como __stdcall.
__cdecl o compilador corrige a stack com add esp,numero de argumentos*4 depois da chamada, __stdcall a própria função corrige a stack no final com RETN numero de argumentos*4.
Ou seja lembre sempre de setar a conveção de chamada.
Code:
typedef bool(__cdecl *IntersectSegment)(const IntersectQuery& Query, IntersectInfo *pInfo);