GNU/Linux >> Linux Esercitazione >  >> Linux

Linux – Modificare /proc/pid/environ dopo l'avvio del processo?

$ k=v p &
[1] 3028

c'è un modo per p per modificare il contenuto di /proc/3028/environ per non parlare di k=v mentre p è ancora in esecuzione?

Risposta accettata:

Su Linux, puoi sovrascrivere il valore delle stringhe di ambiente nello stack.

Quindi puoi nascondere la voce sovrascrivendola con zeri o altro:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[], char* envp[]) {
  char cmd[100];

  while (*envp) {
    if (strncmp(*envp, "k=", 2) == 0)
      memset(*envp, 0, strlen(*envp));

    envp++;
  }

  sprintf(cmd, "cat /proc/%u/environ", getpid());

  system(cmd);
  return 0;
}

Esegui come:

$ env -i a=foo k=v b=bar ./wipe-env | hd
00000000  61 3d 66 6f 6f 00 00 00  00 00 62 3d 62 61 72 00  |a=foo.....b=bar.|
00000010

il k=v è stato sovrascritto con

Linux
  1. Come ottengo il percorso di un processo in Unix/Linux

  2. Cambia il nome del processo in Linux

  3. Come decodificare le voci /proc/pid/pagemap in Linux?

  4. Come impostare lo swapiness per processo per Linux?

  5. cambia /proc/PID/environ dopo l'avvio del processo

Linux:come leggere da /proc/$pid/mem sotto Linux?

Linux – Collegamento di /proc/mnt a /proc/mounts?

Una guida al file system '/proc' in Linux

/proc/cpuinfo e /proc/meminfo in Linux

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Come posso leggere da /proc/$pid/mem sotto Linux?