J'interpose la fonction memcpy() en C car l'application cible l'utilise pour concaténer des chaînes et je veux savoir quelles chaînes sont en cours de création. Le code est:Déterminer si un pointeur reçu est une chaîne, ushort ou un tableau
void * my_memcpy (void * destination, const void * source, size_t num)
{
void *ret = memcpy(destination, source, num);
// printf ("[MEMCPY] = %s \n", ret);
return ret;
}
La fonction est appelée, mais avec succès le premier paramètre peut être tout ce que je veux seulement tracer si le résultat est une chaîne ou un tableau. Je devrais demander si c'est un tableau ou une chaîne. Je sais que cela ne peut pas être simple: y a-t-il un moyen de savoir sur quoi pointe le RET? Je travaille sous MACOSX et en interposition avec DYLD.
Merci beaucoup.
Avez-vous accès à un fichier de carte? Si oui, vous pouvez trouver où vos littéraux de chaîne sont placés et avoir des informations à ce sujet. Idem pour les tableaux globaux. –
Vous ne devriez pas appeler 'printf' dans votre fonction, car' printf' est très compliqué et peut lui-même appeler 'memcpy'. Au lieu de cela, j'irais pour un simple 'write' ou' writev'. Ou vous pouvez ajouter un compteur d'activation thread-safe qui ne fait que la partie 'printf' si elle n'est pas déjà active. –