execle() 还指定环境。这意味着什么?

Sho*_*kie 6 c linux exploit exec shellcode

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

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

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

  2. 不同环境如何分类?

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

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

小智 3

指定环境是什么意思?

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

不同环境如何分类?

我不太明白这个。每个程序都有自己的一组环境变量,仅此而已。

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

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

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

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