execle()也指定环境。 那是什么意思?

我正在读一本名为“黑客:剥削的艺术”的书,我碰到这一段:

使用execl(),将使用现有环境,但是如果使用execle(),则可以指定整个环境。 如果环境数组只是shellcode作为第一个string(带有一个用于终止列表的NULL指针),那么唯一的环境variables就是shellcode。 这使得它的地址易于计算。 在Linux中,地址将是0xbffffffa,减去环境中shellcode的长度,减去执行程序的名称长度。 由于这个地址是准确的,所以不需要NOP底座。

  1. 指定环境是什么意思?

  2. 什么分类不同的环境?

  3. 为什么用这种方式计算环境variables的地址(或者更具体地说为什么是基地址0xbffffffa)?

  4. 如果我使用execl()函数而不是execle()我可以不使用shellcode环境variables吗?

Solutions Collecting From Web of "execle()也指定环境。 那是什么意思?"

指定环境是什么意思?

传递给execle()的最后一个参数是一个char指针数组,它包含描述执行程序将看到的环境变量的C字符串。 这是一个例子。

什么分类不同的环境?

我不太明白这个。 每个程序都有自己的一组环境变量,就是这样。

为什么用这种方式计算环境变量的地址(或者更具体地说为什么是基地址0xbffffffa)?

因为Linux内核是这样实现的。

如果我使用execl()函数而不是execle()我可以不使用shellcode环境变量吗?

execl()不会让你指定环境变量,如果这是你感兴趣的。

  int execle(const char *path, const char *arg0, ... /* const char *argn, (char *)0,char *const envp[]*/); 

envp []数组是指向要创建的进程的所有UNIX环境变量的指针。 这为新流程定义了“环境”。