Pergunta : IAT que remenda, problema ao chamar para trás à função original do alvo?

Olá!, o

I queria saber se um perito poderia me ajudar com o IAT que remenda em O/Ss baseado NT porque eu vim um pouco unstuck.  Eu estou tentando instalar um gancho do API using a injeção do DLL (técnica de LoadLibrary/CreateRemoteThread), e remendo então um par funções de OpenGL para poder interceptar seus parâmetros e executar operações antes de chamar os originais.  Toda a esta está trabalhando aparte de, parece, quando eu chamo de volta às versões originais das funções que têm uma lista de parâmetro - chamar para trás às funções sem parâmetros é suspeito que de fine.

I é como eu especific por ponteiros da função, mim é novo a esta técnica e não pode parecer figurar para fora que é a maneira correta de fazer coisas.  Quando eu chamo de volta às funções originais com a lista de parâmetro apenas deixa de funcionar o código que do alvo process.

The eu me estou usando sou como segue: - ponteiro do

//à função original:

void (*glRotatefOrig) (ângulo de WINAPI de GLfloat, GLfloat x, GLfloat y, GLfloat z); código do

//para começ o ponteiro original da função:

glRotatefOrig = (vácuo (WINAPI *) (GLfloat, GLfloat, GLfloat, GLfloat)) GetProcAddress (hMod, “glRotatef”); hMod = punho de // ao openGL module.

//meu próprio implentation da função (isto é chamado com sucesso pelo alvo process depois do remendo de IAT): myglRotatef do

void (ângulo de GLfloat, GLfloat x, GLfloat y, z)
de GLfloat {console->Write do
(“glRotatef chamado \ n”); glRotatefOrig do ok
das cópias de // (ângulo, x, y, z); // esta chamada deixa de funcionar a aplicação (nenhum erro significativo dado). o

Can qualquer um do
} aponta-me possivelmente a onde eu estou indo mal?  Eu tentei maneiras diferentes numerosas de especific ponteiro original da função mas toda a extremidade nos rasgos: /

Cheers adiantado se você pode ajudar,
Chris
class= do

Resposta : IAT que remenda, problema ao chamar para trás à função original do alvo?

Olá! Chris,

O remendo de IAT é algo que eu toquei violino com completamente muito não há muito tempo: Os livros de J.Richter são realmente leitura exigida neste:)

Eu escrevi uma classe do envoltório, inspirada pelo cavalheiro acima, que me permitiu de enganchar com sucesso funções tais como:: MessageBox etc.  Eu uni minha classe do ajudante abaixo, junto com o uso do exemplo.  Tentá-lo por favor para fora using suas funções de OpenGL - deve trabalhar sem problema.

Você verá aquele quando eu engancho a chamada:: MessageBox, eu mudo o texto que era especific original “mim enganchou esta chamada!”
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
// setup o gancho
VERIFIC (CFuncInAPIHook:: Citar como exemplo () .HookFunction (_T (“user32.dll”), _T (“MessageBoxW”), AfxGetInstanceHandle (), &MyMessageBox (PROC)));

Procedimento da recolocação de //
int WINAPI MyMessageBox (hWnd de HWND,
    lpText de LPCTSTR,
    lpCaption de LPCTSTR,
    uType de UINT
)
{
	O ponteiro da função de // deve ter mesma convenção de chamada que PROC (WINAPI)!  , Prepend conseqüentemente WINAPI (__stdcall)!
	typedef int  (*MESSAGEBOX_FUNC) (HWND de WINAPI, LPCTSTR, LPCTSTR, UINT);

	// recupera somente o endereço de função original uma vez!
	pFunc de estática de MESSAGEBOX_FUNC = (MESSAGEBOX_FUNC) CFuncInAPIHook:: Citar como exemplo () .RetrieveOriginalAPIFunctionAddress (_T (“user32.dll”), _T (“MessageBoxW”));
	AFIRMAR (pFunc);
	retornar o pFunc? (*pFunc) (hWnd, _T (“eu enganchei esta chamada! "), lpCaption, uType): 0;
}

// esta chamada será enganchado
:: MessageBox (ZERO, _T (""), _T (“título”), MB_OK);
Outras soluções  
 
programming4us programming4us