Moyen de ne pas afficher les arguments d'un process
24 réponses
Kevin Denis
Bonjour,
je dois utiliser temporairement un soft sous linux.
Ce soft prend toutes ses options en ligne de commande. La conséquence, c'est
que toute personne qui fait un ps axww peut lire l'ensemble des options
utilisées.
Exemple: $ ./mon_soft -X -login=toto -password=secret -options
Depuis un autre accès: ps axww et à moi le password!
Ca m'ennuie un peu de voir trainer ce genre de choses dans un ps ax.
Existe t'il un moyen simple (avant que je ne change de soft) de lancer
un programme sous linux avec des options sans qu'on les affiche avec un
ps ax? J'ai naïvement tenté de faire un alias ou un wrapper C contenant
un appel system("mon_soft"), mais ça ne fonctionne pas.
A noter que C99 et C11 ne requiert plus de return pour la fonction main, contrairement à C89. Voir à ce sujet 5.1.2.2.3.
Mais bon, vu la gueule de la fonction au départ, je crains que cette remarque ne tombe complètement à plat.
-- Bruno Ducrot
A quoi ca sert que Ducrot hisse des carcasses ?
Nicolas George
JKB , dans le message , a écrit :
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne par un autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Maintenant on le sait, JKB ne connaît pas le C.
JKB , dans le message <slrnko78jo.4pa.jkb@rayleigh.systella.fr>, a
écrit :
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De
mémoire, à un moment, tu colles 'X' dans l'argument courant. Si
l'argument courant était "", il risque de se passer des choses parce
que tu remplaces un caractère de fin de chaîne par un autre
caractère non nul (où se trouve alors la fin de la chaîne ?).
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne par un autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Maintenant on le sait, JKB ne connaît pas le C.
Bruno Ducrot
On 2013-05-03, JKB wrote:
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne par un autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est : while(*p) *p++ = 'X';
ce qui montre que tu as lu trop vite.
Par ailleurs, je ne suis pas sûr que cette mémoire soit accessible en écriture de façon portable (si tu fais ça sur un VMS des familles, tu te prends un coup de pied aux fesses bien mérité).
Si cela est vrai, alors cela signifie clairement que OpenVMS n'a pas de compilateur C respectant au moins C89, ni les standards plus récents.
Voir 5.1.2.2.1 du standard actuel, que je cite en partie :
The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination.
A plus,
-- Bruno Ducrot
A quoi ca sert que Ducrot hisse des carcasses ?
On 2013-05-03, JKB wrote:
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De
mémoire, à un moment, tu colles 'X' dans l'argument courant. Si
l'argument courant était "", il risque de se passer des choses parce
que tu remplaces un caractère de fin de chaîne par un autre
caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est :
while(*p)
*p++ = 'X';
ce qui montre que tu as lu trop vite.
Par
ailleurs, je ne suis pas sûr que cette mémoire soit accessible en
écriture de façon portable (si tu fais ça sur un VMS des familles, tu
te prends un coup de pied aux fesses bien mérité).
Si cela est vrai, alors cela signifie clairement que OpenVMS n'a pas de
compilateur C respectant au moins C89, ni les standards plus récents.
Voir 5.1.2.2.1 du standard actuel, que je cite en partie :
The parameters argc and argv and the strings pointed to by the argv
array shall be modifiable by the program, and retain their last-stored
values between program startup and program termination.
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne par un autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est : while(*p) *p++ = 'X';
ce qui montre que tu as lu trop vite.
Par ailleurs, je ne suis pas sûr que cette mémoire soit accessible en écriture de façon portable (si tu fais ça sur un VMS des familles, tu te prends un coup de pied aux fesses bien mérité).
Si cela est vrai, alors cela signifie clairement que OpenVMS n'a pas de compilateur C respectant au moins C89, ni les standards plus récents.
Voir 5.1.2.2.1 du standard actuel, que je cite en partie :
The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination.
Arf, cette ligne ("./mon_soft") m'a fait pensé que tu as la main sur les sources,, mais c'est peut-être pas le cas. Désolé..
En fait, c'est beaucoup plus simple que je ne pensais. C'est un vieux _script_ (en perl). Donc c'est bon, c'est modifié. -- Kevin
JKB
Le Fri, 3 May 2013 13:07:56 +0000 (UTC), Bruno Ducrot écrivait :
On 2013-05-03, JKB wrote:
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne par un autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est : while(*p) *p++ = 'X';
ce qui montre que tu as lu trop vite.
Je ne sais plus sur quoi pointe p (argv ou *argv ?).
De toute façon, c'est presque du détail. Il faut que cette mémoire soit accessible en écriture. Ce n'est pas parce que c'est spéficié dans les derniers standards que c'est le cas partout. Je connais au moins deux compilos qui vont refuser ça et mon expérience me dit que c'est le genre d'hypothèses dangereuses (déjà que le comportement d'argc/argv et arge dépend un peu du système...).
JKB
-- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
Le Fri, 3 May 2013 13:07:56 +0000 (UTC),
Bruno Ducrot <ducrot@echo.fr> écrivait :
On 2013-05-03, JKB wrote:
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De
mémoire, à un moment, tu colles 'X' dans l'argument courant. Si
l'argument courant était "", il risque de se passer des choses parce
que tu remplaces un caractère de fin de chaîne par un autre
caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est :
while(*p)
*p++ = 'X';
ce qui montre que tu as lu trop vite.
Je ne sais plus sur quoi pointe p (argv ou *argv ?).
De toute façon, c'est presque du détail. Il faut que cette mémoire
soit accessible en écriture. Ce n'est pas parce que c'est spéficié
dans les derniers standards que c'est le cas partout. Je connais au
moins deux compilos qui vont refuser ça et mon expérience me dit que
c'est le genre d'hypothèses dangereuses (déjà que le comportement
d'argc/argv et arge dépend un peu du système...).
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Le Fri, 3 May 2013 13:07:56 +0000 (UTC), Bruno Ducrot écrivait :
On 2013-05-03, JKB wrote:
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne par un autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est : while(*p) *p++ = 'X';
ce qui montre que tu as lu trop vite.
Je ne sais plus sur quoi pointe p (argv ou *argv ?).
De toute façon, c'est presque du détail. Il faut que cette mémoire soit accessible en écriture. Ce n'est pas parce que c'est spéficié dans les derniers standards que c'est le cas partout. Je connais au moins deux compilos qui vont refuser ça et mon expérience me dit que c'est le genre d'hypothèses dangereuses (déjà que le comportement d'argc/argv et arge dépend un peu du système...).
JKB
-- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
Nicolas George
JKB , dans le message , a écrit :
Ce n'est pas parce que c'est spéficié dans les derniers standards que c'est le cas partout.
Pour toi, C89 c'est le dernier standard ? Ça explique bien des choses.
JKB , dans le message <slrnko7h49.5fg.jkb@rayleigh.systella.fr>, a
écrit :
Ce n'est pas parce que c'est spéficié
dans les derniers standards que c'est le cas partout.
Pour toi, C89 c'est le dernier standard ? Ça explique bien des choses.
Ce n'est pas parce que c'est spéficié dans les derniers standards que c'est le cas partout.
Pour toi, C89 c'est le dernier standard ? Ça explique bien des choses.
Bruno Ducrot
On 2013-05-03, JKB wrote:
Le Fri, 3 May 2013 13:07:56 +0000 (UTC), Bruno Ducrot écrivait :
On 2013-05-03, JKB wrote:
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne par un autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est : while(*p) *p++ = 'X';
ce qui montre que tu as lu trop vite.
Je ne sais plus sur quoi pointe p (argv ou *argv ?).
Si je me souviens bien, ce devait être quelque chose :
for (i = 1; i < argc; ++i) { p = argv[i]; while (*p) *p++ = 'X'; }
De toute façon, c'est presque du détail. Il faut que cette mémoire soit accessible en écriture. Ce n'est pas parce que c'est spéficié dans les derniers standards que c'est le cas partout.
Ca date de C89. On ne peut pas vraiment dire que c'est le dernier, hein.
Je connais au moins deux compilos qui vont refuser ça et mon expérience me dit que c'est le genre d'hypothèses dangereuses (déjà que le comportement d'argc/argv et arge dépend un peu du système...).
Ce sont des hypothèses correctes pour Linux, qui est d'ailleurs l'objet de ce groupe.
A plus,
-- Bruno Ducrot
A quoi ca sert que Ducrot hisse des carcasses ?
On 2013-05-03, JKB wrote:
Le Fri, 3 May 2013 13:07:56 +0000 (UTC),
Bruno Ducrot <ducrot@echo.fr> écrivait :
On 2013-05-03, JKB wrote:
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De
mémoire, à un moment, tu colles 'X' dans l'argument courant. Si
l'argument courant était "", il risque de se passer des choses parce
que tu remplaces un caractère de fin de chaîne par un autre
caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est :
while(*p)
*p++ = 'X';
ce qui montre que tu as lu trop vite.
Je ne sais plus sur quoi pointe p (argv ou *argv ?).
Si je me souviens bien, ce devait être quelque chose :
for (i = 1; i < argc; ++i) {
p = argv[i];
while (*p)
*p++ = 'X';
}
De toute façon, c'est presque du détail. Il faut que cette mémoire
soit accessible en écriture. Ce n'est pas parce que c'est spéficié
dans les derniers standards que c'est le cas partout.
Ca date de C89. On ne peut pas vraiment dire que c'est le dernier, hein.
Je connais au
moins deux compilos qui vont refuser ça et mon expérience me dit que
c'est le genre d'hypothèses dangereuses (déjà que le comportement
d'argc/argv et arge dépend un peu du système...).
Ce sont des hypothèses correctes pour Linux, qui est d'ailleurs
l'objet de ce groupe.
Le Fri, 3 May 2013 13:07:56 +0000 (UTC), Bruno Ducrot écrivait :
On 2013-05-03, JKB wrote:
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne par un autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Le code en question est : while(*p) *p++ = 'X';
ce qui montre que tu as lu trop vite.
Je ne sais plus sur quoi pointe p (argv ou *argv ?).
Si je me souviens bien, ce devait être quelque chose :
for (i = 1; i < argc; ++i) { p = argv[i]; while (*p) *p++ = 'X'; }
De toute façon, c'est presque du détail. Il faut que cette mémoire soit accessible en écriture. Ce n'est pas parce que c'est spéficié dans les derniers standards que c'est le cas partout.
Ca date de C89. On ne peut pas vraiment dire que c'est le dernier, hein.
Je connais au moins deux compilos qui vont refuser ça et mon expérience me dit que c'est le genre d'hypothèses dangereuses (déjà que le comportement d'argc/argv et arge dépend un peu du système...).
Ce sont des hypothèses correctes pour Linux, qui est d'ailleurs l'objet de ce groupe.
Le Sat, 4 May 2013 13:02:24 +0200, xtof pernod écrivait :
Le Fri, 3 May 2013 11:41:46 +0000 (UTC), JKB a écrit :
Le Fri, 3 May 2013 13:21:52 +0200, xtof pernod écrivait : > Le Fri, 3 May 2013 09:19:29 +0000 (UTC), > JKB a écrit : > >> Le Thu, 2 May 2013 20:23:43 +0200, >> xtof écrivait : >> > Le 02 May 2013 13:10:42 GMT, >> > Kevin Denis a écrit : >> > >> >> (...) >> J'ai pour idée que ./prog "" pourrait joyeusement >> segfaulter... >> >> JKB >> > > Nope, ça passe. La boucle est "while (*p)", et s'arrête donc au 1er > octet nul..
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne
Non, la boucle "while (*p)" s'arrête avant, et ne remplace pas le caractère ' ' ..
J'ai admis que j'avais répondu de mémoire.
par un autre caractère non nul (où se trouve alors la fin de la chaîne ?). Par ailleurs, je ne suis pas sûr que cette mémoire soit accessible en écriture de façon portable (si tu fais ça sur un VMS des
J'ai vérifié, il y a bien "linux" dans "fr.comp.os.linux.configuration" :)
Ma remarque était juste le fait que ce n'est pas portable. personnellement, je ne connais aucun compilo qui suive tous les standards et je ne m'y fie pas. Mais chacun ses choix.
JKB
-- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
Le Sat, 4 May 2013 13:02:24 +0200,
xtof pernod <xtof.pernod@free.fr> écrivait :
Le Fri, 3 May 2013 11:41:46 +0000 (UTC),
JKB <jkb@koenigsberg.invalid> a écrit :
Le Fri, 3 May 2013 13:21:52 +0200,
xtof pernod <xtof.pernod@free.fr> écrivait :
> Le Fri, 3 May 2013 09:19:29 +0000 (UTC),
> JKB <jkb@koenigsberg.invalid> a écrit :
>
>> Le Thu, 2 May 2013 20:23:43 +0200,
>> xtof <xtof.pernod@free.fr> écrivait :
>> > Le 02 May 2013 13:10:42 GMT,
>> > Kevin Denis <kevin@nowhere.invalid> a écrit :
>> >
>> >> (...)
>> J'ai pour idée que ./prog "" pourrait joyeusement
>> segfaulter...
>>
>> JKB
>>
>
> Nope, ça passe. La boucle est "while (*p)", et s'arrête donc au 1er
> octet nul..
J'ai lu le truc en diagonale (et tu l'as effacé de ma
réponse). De mémoire, à un moment, tu colles 'X' dans l'argument
courant. Si l'argument courant était "", il risque de se passer des
choses parce que tu remplaces un caractère de fin de chaîne
Non, la boucle "while (*p)" s'arrête avant, et ne remplace pas le
caractère ' ' ..
J'ai admis que j'avais répondu de mémoire.
par un
autre caractère non nul (où se trouve alors la fin de la chaîne ?).
Par ailleurs, je ne suis pas sûr que cette mémoire soit accessible en
écriture de façon portable (si tu fais ça sur un VMS des
J'ai vérifié, il y a bien "linux" dans "fr.comp.os.linux.configuration"
:)
Ma remarque était juste le fait que ce n'est pas portable.
personnellement, je ne connais aucun compilo qui suive tous les
standards et je ne m'y fie pas. Mais chacun ses choix.
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Le Sat, 4 May 2013 13:02:24 +0200, xtof pernod écrivait :
Le Fri, 3 May 2013 11:41:46 +0000 (UTC), JKB a écrit :
Le Fri, 3 May 2013 13:21:52 +0200, xtof pernod écrivait : > Le Fri, 3 May 2013 09:19:29 +0000 (UTC), > JKB a écrit : > >> Le Thu, 2 May 2013 20:23:43 +0200, >> xtof écrivait : >> > Le 02 May 2013 13:10:42 GMT, >> > Kevin Denis a écrit : >> > >> >> (...) >> J'ai pour idée que ./prog "" pourrait joyeusement >> segfaulter... >> >> JKB >> > > Nope, ça passe. La boucle est "while (*p)", et s'arrête donc au 1er > octet nul..
J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De mémoire, à un moment, tu colles 'X' dans l'argument courant. Si l'argument courant était "", il risque de se passer des choses parce que tu remplaces un caractère de fin de chaîne
Non, la boucle "while (*p)" s'arrête avant, et ne remplace pas le caractère ' ' ..
J'ai admis que j'avais répondu de mémoire.
par un autre caractère non nul (où se trouve alors la fin de la chaîne ?). Par ailleurs, je ne suis pas sûr que cette mémoire soit accessible en écriture de façon portable (si tu fais ça sur un VMS des
J'ai vérifié, il y a bien "linux" dans "fr.comp.os.linux.configuration" :)
Ma remarque était juste le fait que ce n'est pas portable. personnellement, je ne connais aucun compilo qui suive tous les standards et je ne m'y fie pas. Mais chacun ses choix.
JKB
-- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr