Mais il y a des problèmes d'indirection dans ton code:
hook._open est un pointeur sur une fonction. Il doit donc être appelé comme (*(hook._open))(...)
Et quand tu fais hook._open( pathname, flags, mode ); il n'y a pas de raison que ça marche, puisque ce devrait être (*(hook._open))(pathname, flags, mode );
et idem pour return hook._close( fd ); ce devrait être (*(hook._close))( fd );
Je vois le même problème dans le code posté dans ton autre sujet:
if ( ! hook._gettimeofday )
hook._gettimeofday = (int (*)(struct timeval *, struct timezone *))dlsym( RTLD_NEXT, "gettimeofday" );
if (test == 0) {
test++;
process_run(123);
test--;
}
ret = wrapper._gettimeofday( tv, tz );
Le hook est casté avec une structure d'arguments incorrecte, et si tu utilises la même technique, l'appel au wrapper devrait être ret = (*(wrapper._gettimeofday))( tv, tz );
A+,
Message édité par gilou le 17-07-2011 à 19:24:27
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --