GNU/Linux >> Tutoriels Linux >  >> Linux

gdb semble ignorer les capacités exécutables

Je rencontre le même problème et au début, je pensais comme ci-dessus que gdb ignore peut-être la capacité de l'exécutable pour des raisons de sécurité. Cependant, lire le code source et même utiliser eclipse pour déboguer gdb lui-même lorsqu'il débogue mon ext2fs-prog qui ouvre /dev/sda1 , je me rends compte que :

  1. gdb n'est pas spécial comme n'importe quel autre programme. (Tout comme dans la matrice, même les agents eux-mêmes obéissent à la même loi physique, gravité, etc., sauf qu'ils sont tous des gardiens.)
  2. gdb n'est pas le processus parent de l'exécutable débogué, c'est plutôt le grand-père.
  3. Le véritable processus parent de l'exécutable débogué est "shell", c'est-à-dire /bin/bash dans mon cas.

Donc, la solution est très simple, à part ajouter cap_net_admin,cap_net_raw+eip à gdb, vous devez également l'appliquer à votre shell. c'est-à-dire setcap cap_net_admin,cap_net_raw+eip /bin/bash

La raison pour laquelle vous devez également faire cela pour gdb est que gdb est le processus parent de /bin/bash avant de créer un processus débogué.

La véritable ligne de commande exécutable à l'intérieur de gdb ressemble à ceci :

/bin/bash exec /my/executable/program/path

Et c'est le paramètre de vfork à l'intérieur de gdb.


Pour ceux qui ont le même problème, vous pouvez contourner celui-ci en exécutant gdb avec sudo.


Il y a quelque temps, j'ai rencontré le même problème. Je suppose que l'exécution du programme débogué avec les fonctionnalités supplémentaires est un problème de sécurité.

Votre programme a plus de privilèges que l'utilisateur qui l'exécute. Avec un débogueur, un utilisateur peut manipuler l'exécution du programme. Ainsi, si le programme s'exécute sous le débogueur avec les privilèges supplémentaires, l'utilisateur peut utiliser ces privilèges à d'autres fins que celles pour lesquelles le programme a prévu de les utiliser. Ce serait une grave faille de sécurité, car l'utilisateur n'a pas les privilèges en premier lieu.


Linux
  1. Garder une trace des programmes ?

  2. Pourquoi le CD n'est-il pas un programme ?

  3. Lister les fichiers accessibles par un programme ?

  4. Comment rendre un programme exécutable de partout ?

  5. Comment déboguer le programme C en utilisant gdb en 6 étapes simples

Comment installer gdb dans RHEL 8

Comment rendre un fichier exécutable sous Linux

5 conseils pour maîtriser Linux

Parcours d'un programme C vers un exécutable Linux en 4 étapes

Que dois-je utiliser sous Linux pour rendre un programme python exécutable

GDB peut-il modifier le code assembleur d'un programme en cours d'exécution ?