程序集:return __p___argv 的值

Assembly: return value of __p___argv

我刚开始学习汇编和逆向工程。我知道这是一个非常基本的问题,但我仍然不能 100% 确定我是否得到了正确的答案。 __p___argv return 传递给程序的参数并将 return 值存储在 eax 中。
我的问题与代码有关:

call    __p___argv
mov     edi, [eax]

在VC++中,__p___argv声明如下:

__declspec(dllimport) char***    __cdecl __p___argv (void);

在MinGW中,__p___argv声明如下:

extern char***   __p___argv(void);

在这两种情况下,函数 returns 指向包含 argv 数组地址(即第一个元素的地址)的位置的指针 eax/rax

用户传递的第一个参数总是argv[1],这个参数的地址存储在argv数组的第二个元素中。因此,您必须先取消引用 eax/rax,然后将 4/8 字节添加到结果地址以获得用户传递的第一个参数的地址。

您也可以使用 __argv,这是一个等同于 *__p___argv().

的变量