我有这个功能:
int execve(const char* filename, char* const argv[], char* const envp[]);
我需要将envp参数设置为NULL,所以在执行函数之前我需要在edx寄存器中指向NULL(更好的说,系统调用使用int 0x80)。问题是,我可以这样做:
mov eax, 0
mov edx, eax ; edx points to NULL, no to some address that contains NULL
或者我需要:
push 0
mov edx, esp ; edx points to some address that contains NULL
答案 0 :(得分:0)
这取决于操作系统。在Linux中,您可以直接使用NULL指针。
在Linux上,argv和envp可以指定为NULL。在这两种情况下,这个 具有与将参数指定为列表指针相同的效果 包含一个空指针。不要利用这个 不好的特性!它是非标准的,不可移植的:在大多数其他UNIX上 执行此操作的系统将导致错误(EFAULT)。