2009-10-27 3 views
5

Selon le Linux man page for mprotect la fonction a 3 Arguments:fonction mprotect appelée avec 5 arguments

int mprotect(const void *addr, size_t len, int prot); 

mais lors de l'exécution ltrace sur un programme que je l'analyse, je vois que mprotect est appelé comme ceci:

mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)  = 0 

quels sont les arguments 4 et 5 pour ??

Édition: Utilisation de ltrace version 0.5. et noyau 2.6.24-24-générique

grâce

+0

Que diriez-vous du cinquième un? – Cascabel

+0

désolé, tout en balayant les arguments j'ai raté le 4ème;) – woolagaroo

+0

Quelle version de strace. Quelle version du noyau Linux? – Puppe

Répondre

7

Cinq est le nombre d'arguments qui Ltrace imprimera si elle ne trouve pas la description de la fonction dans le fichier de configuration. (/etc/ltrace.conf par défaut, je pense).

Sur mon système, je peux voir le même comportement, et le mprotect ne se trouve pas là, seulement le SYS_mprotect.

Si vous voulez avoir un second look de la source ltrace, l'endroit d'intérêt est le output.c, le conditionnel après "func = name2func (nom_fonction);" - qui imprime 5 arguments dans le cas où la méta-info pour le nom de la fonction est introuvable (et auquel cas la recherche linéaire dans le nom2func renvoie NULL).

Ainsi, le manuel est correct, il est ltrace qui est « mauvais » (cité « mauvais » parce que techniquement le code fonctionne comme il se doit, mais probablement les defs dans la configuration doivent être fixés)

+0

Ces jours-ci, il semble être 'ret-> num_params = 4;' dans 'build_default_prototype'. Merci pour ce commentaire, cependant, cela m'a aidé à découvrir comment ltrace détermine # args à partir d'une fonction inconnue. J'espérais que ce serait un algorithme magique. – wump

Questions connexes