请问一下为啥GetCommandLine()返回的命令行地址和使用全局变量__argv地址不一样?

TCHAR* v5 = GetCommandLine();
    //_tprintf(TEXT("%s\n"), v5);
    _tprintf(TEXT("命令行参数的地址:%p\n"), v5);
    wprintf(L"命令行参数的地址:%p\n", __wargv[0]);

运行结果:

命令行参数的地址:00E727F2

命令行参数的地址:00E704D8

我看了GetCommandLine源码,是从PEB直接赋值啊,那么两个地址应该一样才是,不知道为啥不一样呢?

因为C++的main函数不是exe的入口函数,比如是mainWCRTStartup,所以可能存在二次包装__argv参数的过程。