程序集:return __p___argv 的值
Assembly: return value of __p___argv
我刚开始学习汇编和逆向工程。我知道这是一个非常基本的问题,但我仍然不能 100% 确定我是否得到了正确的答案。 __p___argv
return 传递给程序的参数并将 return 值存储在 eax
中。
我的问题与代码有关:
call __p___argv
mov edi, [eax]
- 据我了解
eax
将包含 argv[0]
的内存地址,这是正确的吗?
argv[0]
其实不是用户传递的第一个参数而是别的什么,而用户传递的参数是从argv[1]
开始的?
- 由于
[eax]
将访问 eax
中指定位置的内存,因此 argv[0]
的值移动到 edi
?
在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()
.
的变量
我刚开始学习汇编和逆向工程。我知道这是一个非常基本的问题,但我仍然不能 100% 确定我是否得到了正确的答案。 __p___argv
return 传递给程序的参数并将 return 值存储在 eax
中。
我的问题与代码有关:
call __p___argv
mov edi, [eax]
- 据我了解
eax
将包含argv[0]
的内存地址,这是正确的吗? argv[0]
其实不是用户传递的第一个参数而是别的什么,而用户传递的参数是从argv[1]
开始的?- 由于
[eax]
将访问eax
中指定位置的内存,因此argv[0]
的值移动到edi
?
在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()
.