我正在读一本名为“黑客:剥削艺术”的书,我看到了这一段:
使用execl(),使用现有环境,但如果使用execle(), 可以指定整个环境。如果环境数组只是 shellcode作为第一个字符串(用NULL指针终止列表),. 只有环境变量才是shellcode。这使得它的地址变得容易 计算。在Linux中,地址将为0xbffffffa,减去长度 shellcode在环境中,减去执行名称的长度 程序。由于这个地址是准确的,因此不需要NOP雪橇。
指定环境是什么意思?
什么分类不同的环境?
为什么环境变量的地址是以这种方式计算的(或者更具体地说为什么是基地址0xbffffffa)?
如果我使用execl()函数而不是execle(),我是否可以使用shellcode环境变量?
答案 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环境变量的指针。这定义了新流程的“环境”。