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

时间:2013-05-31 19:48:28

标签: c linux exec exploit shellcode

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

  

使用execl(),使用现有环境,但如果使用execle(),   可以指定整个环境。如果环境数组只是   shellcode作为第一个字符串(用NULL指针终止列表),.   只有环境变量才是shellcode。这使得它的地址变得容易   计算。在Linux中,地址将为0xbffffffa,减去长度   shellcode在环境中,减去执行名称的长度   程序。由于这个地址是准确的,因此不需要NOP雪橇。

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

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

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

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

2 个答案:

答案 0 :(得分:3)

  

指定环境是什么意思?

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

  

什么对不同的环境进行分类?

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

  

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

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

  

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

execl() 允许您指定环境变量,如果这是您感兴趣的内容。

答案 1 :(得分:0)

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

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