我正在阅读一本名为《黑客攻防艺术》的书,我看到了这段话:
使用execl()函数时,将使用现有环境,但如果您使用execle()函数,则可以指定整个环境。如果环境数组仅是shellcode的第一个字符串(带有终止列表的空指针),则唯一的环境变量将是shellcode。这使得它的地址容易计算。在Linux中,地址将为0xbffffffa,减去环境中shellcode的长度,减去执行程序名称的长度。由于此地址将是确切的,因此不需要NOP滑板。
什么是指定环境?
答:指定环境是指在使用execle()函数时可以自己定义环境变量。什么分类不同的环境?
答:不同的环境可以通过环境变量来区分,在Linux系统下使用export命令添加环境变量。为什么要按那种方式计算环境变量的地址(或者更具体地说,为什么基地址是0xbffffffa)?
答:Linux系统的内存布局决定了环境变量的基地址是0xbffffffa,具体原因与内存布局有关。如果我使用execl()函数而不是execle()函数,我就不能使用shellcode环境变量吗?
答:是的,如果您使用execl()函数,则无法使用shellcode环境变量。
getenv()
无关。该函数设置环境变量。 - user529758