2011-10-09 4 views
2

Création d'un débogueur en C pour le fuzzing.Construction d'un débogueur Linux C

Fondamentalement, dans Linux, je veux juste commencer un processus via fork puis execve(), puis surveiller ce processus pour voir s'il se bloque après 1 seconde.

Sur Linux, est-ce fait en créant le processus puis en surveillant les SIGNAL qu'il génère pour tout ce qui ressemble à un crash? Ou s'agit-il de surveiller l'application et? Je ne suis pas sûr.

Répondre

6

Utilisez l'appel système ptrace(2):

Tout en étant tracée, l'enfant s'arrêtera chaque fois qu'un signal est délivré, même si le signal est ignoré. (L'exception est SIGKILL, qui a son effet habituel.) Le parent sera notifié au de son prochain wait (2) et pourra inspecter et modifier le processus enfant pendant que est arrêté. Le parent provoque alors la poursuite de l'enfant, en ignorant éventuellement le signal délivré (ou même en délivrant un signal différent à la place).

Les signaux vous devraient être intéressés, en ce qui concerne le procédé étant écrasé sont SIGSEGV (accès à la mémoire restreint), SIGBUS (accès de données non aligné), SIGILL (instruction illégale), SIGFPE (opération à virgule flottante illégale), etc.