Некоторые версии init
перезаписывают свою командную строку, поэтому они отображаются как init
в списке ps
.
int main(int argc, char * argv[]) {
// process the arguments or make a copy of them
// and then
char * argv0 = argv[0];
while (*argv++) {
size_t len = strlen(*argv);
memset(*argv, 0, len);
}
strcpy(argv0, "init");
Я был удивлен, увидев, что этот тип вещей используется и что * nix может быть спроектирован таким образом, чтобы он мог работать. Я не проверял, работает ли он, между прочим, но я читал, что это должна быть актуальная память, в которой находятся аргументы, и что копирование только массива указателей на эти аргументы не будет работать.
Это все еще неработающий способ передачи конфиденциальной информации через командную строку (или переменные окружения, поскольку они доступны в /proc/<pid>/environ
так же, как argv в /proc/<pid>/cmdline
под Linux).