higepon氏がBlog上でLinuxでargv[0]を書き換えたらpsコマンドに反映された。と書いていたのだが、まるでそんなアーキになっていない気がして仕方が無かったので、さっくり調査
実験マシンはRHEL4U2 on IA64.
ソースファイル:
はずかしいバグを入れてしまった(コメント参照のこと)
↓こっちを見てね
psコマンド出力結果:
とゆーわけで、Linuxではargv0書き換えは意味がない。に一票。
おぼろげな記憶で書くと、もともとargv0書き換えってBSD系とSYSV系で
動作が違ってるから互換性ないよー
とか言われてなかったっけ?昔。
BSD系はPSコマンドがユーザプロセスの領域みてる(ような気がする)
から、BSD向けのコードなんじゃね?
Linuxではexec時にコマンドライン文字列をcurrent->commにstrcpyしちゃってるからargv[0]書き換えは意味無いと思うな。
Linuxでは、psの出力を誤魔化すような書き換えは出来ないんじゃねーかーとか思っておりまする。
だれか反論プリーズ
追記: よく見たら、すっげー古い記事だったので、いまさらコメントしても何の意味もなかったorz
ここはあろはさんが悪いということにしておこう。
実験マシンはRHEL4U2 on IA64.
ソースファイル:
main(int argc, char** argv){
argv[0] = "hoge";
while(1)
;
}
はずかしいバグを入れてしまった(コメント参照のこと)
↓こっちを見てね
#include
main(int argc, char** argv){
strcpy(argv[0], "hoge");
while(1)
;
}
psコマンド出力結果:
$ ps
PID TTY TIME CMD
19260 pts/2 00:00:00 bash
19283 pts/2 00:00:01 a.out
19284 pts/2 00:00:00 ps
とゆーわけで、Linuxではargv0書き換えは意味がない。に一票。
おぼろげな記憶で書くと、もともとargv0書き換えってBSD系とSYSV系で
動作が違ってるから互換性ないよー
とか言われてなかったっけ?昔。
BSD系はPSコマンドがユーザプロセスの領域みてる(ような気がする)
から、BSD向けのコードなんじゃね?
Linuxではexec時にコマンドライン文字列をcurrent->commにstrcpyしちゃってるからargv[0]書き換えは意味無いと思うな。
Linuxでは、psの出力を誤魔化すような書き換えは出来ないんじゃねーかーとか思っておりまする。
だれか反論プリーズ
追記: よく見たら、すっげー古い記事だったので、いまさらコメントしても何の意味もなかったorz
ここはあろはさんが悪いということにしておこう。
コメント
コメント一覧 (12)
argv[0] = "hoge";
ではなくて
strcpy( argv[0], "hoge" );
ですね。メモリ壊してもしーらないっと。
これはちょっと恥ずかしいですね。
ま、結論に変わりはないわけですが・・・
main(int argc, char *argv[])
{
strcpy(argv[0], "wao");
system("/bin/ps f");
system("/bin/ps ");
exit(0);
}
FreeBSD 6.1 で試してもプロセス名は変わりませんでした。
ps とか ps -ef では変って見えないけど、ps f とか ps ax とかだと変って見えませんか?
面白いので、もうちょっと調べてから別のエントリに起こそうと思います。
つまり、僕が間違っていました。ごめんなさい。
と、いうことです。
<a href= http://www.angelfire.com/aoyobu/1.html >I</a>
http://www.angelfire.com/aoyobu/2.html
革命の日々
<a href= http://www.freewebs.com/oixoch/2.html >is</a>
http://www.freewebs.com/oixoch/1.html
革命の日々