指向NULL的指针

时间:2015-01-29 02:41:53

标签: assembly

我有这个功能:

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

1 个答案:

答案 0 :(得分:0)

这取决于操作系统。在Linux中,您可以直接使用NULL指针。

man execve

  

在Linux上,argv和envp可以指定为NULL。在这两种情况下,这个   具有与将参数指定为列表指针相同的效果   包含一个空指针。不要利用这个   不好的特性!它是非标准的,不可移植的:在大多数其他UNIX上   执行此操作的系统将导致错误(EFAULT)。