4

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

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

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

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

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

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

4

2 回答 2

3

指定环境是什么意思?

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

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

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

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

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

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

execl()如果您对此感兴趣,则不允许您指定环境变量。

于 2013-05-31T19:56:17.050 回答
0
 int execle(const char *path, const char *arg0, ...
         /* const char *argn, (char *)0,char *const envp[]*/);

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

于 2013-05-31T19:56:48.723 回答