Simplemente pense que se podrian conseguir esos valores igual que en sistemas Unix-like, error mio, tampoco lo veo una perdida de tiempo saber como funcionan las cosas sin llamar a una API.
No, perder el tiempo seria continuar buscando en la pila lo que no esta ella, por eso se lo dije a otra persona y no a vos. Saber como funcionan la cosas es muy util, nadie dijo lo contrario. La linea de comandos esta en el PEB (Process Environment Block).
0:000> u kernel32!getcommandlinew
kernel32!GetCommandLineW:
00000000`775ac428 ff25ea160800 jmp qword ptr [kernel32!_imp_GetCommandLineW (00000000`7762db18)]
0:000> u poi(7762db18)
KERNELBASE!GetCommandLineW:
000007fe`fd5ecb70 488b05713b0500 mov rax,qword ptr [KERNELBASE!BaseUnicodeCommandLine+0x8 (000007fe`fd6406e8)]
000007fe`fd5ecb77 c3 ret
0:000> du poi(000007fe`fd6406e8)
00000000`003034ac "C:\Windows\System32\calc.exe"
0:000> !peb
PEB at 000007fffffdf000
....
0:000> dt ntdll!_PEB 000007fffffdf000
+0x000 InheritedAddressSpace : 0 ''
+0x001 ReadImageFileExecOptions : 0 ''
+0x002 BeingDebugged : 0x1 ''
+0x003 BitField : 0x8 ''
+0x003 ImageUsesLargePages : 0y0
+0x003 IsProtectedProcess : 0y0
+0x003 IsLegacyProcess : 0y0
+0x003 IsImageDynamicallyRelocated : 0y1
+0x003 SkipPatchingUser32Forwarders : 0y0
+0x003 SpareBits : 0y000
+0x008 Mutant : 0xffffffff`ffffffff Void
+0x010 ImageBaseAddress : 0x00000000`ff170000 Void
+0x018 Ldr : 0x00000000`777e2640 _PEB_LDR_DATA
+0x020 ProcessParameters : 0x00000000`00302690 _RTL_USER_PROCESS_PARAMETERS.....
0:000> dt -b ntdll!_RTL_USER_PROCESS_PARAMETERS CommandLine. 0x00000000`00302690
+0x070 CommandLine : "C:\Windows\System32\calc.exe"
+0x000 Length : 0x38
+0x002 MaximumLength : 0x3a
+0x008 Buffer : 0x00000000`003034ac "C:\Windows\System32\calc.exe"De
yapa, sabiendo lo anterior y como obtener el PEB se puede obtener la linea de comandos sin API en x64:
0:000> u ntdll!RtlGetCurrentPeb
ntdll!RtlGetCurrentPeb:
00000000`77760600 65488b042530000000 mov rax,qword ptr gs:[30h]
00000000`77760609 488b4060 mov rax,qword ptr [rax+60h]
00000000`7776060d c3 ret
Eso si, el
PEB podria cambiar en cualquier momento como dice la documentacion. Por eso mejor usar la simple API en este caso.