Sin usar ninguna variable local tenes que restarle 0x58 a la pila, eso es lo minimo indispensable. 0x20 para el shadow space, 0x30 para los parametros que necesita la funcion (son 10 en total, 4 en registros y 6 en pila, 6 * 8 = 0x30) y 8 para alinear la pila a 16.
No me voy a poner a hacer ese trabajo a mano para las variables locales pero aca tenes un ejemplo generado por VC++:
0000000000000000: 48 8B C4 mov rax,rsp
0000000000000003: 48 81 EC E8 00 00 sub rsp,0E8h
00
000000000000000A: 33 D2 xor edx,edx
000000000000000C: C7 40 08 63 6D 64 mov dword ptr [rax+8],646D63h
00
0000000000000013: 48 8D 48 8C lea rcx,[rax-74h]
0000000000000017: 44 8D 42 64 lea r8d,[rdx+64h]
000000000000001B: E8 00 00 00 00 call memset
0000000000000020: 48 8D 44 24 50 lea rax,[rsp+50h]
0000000000000025: C7 44 24 70 68 00 mov dword ptr [rsp+70h],68h
00 00
000000000000002D: 48 89 44 24 48 mov qword ptr [rsp+48h],rax
0000000000000032: 48 8D 8C 24 F0 00 lea rcx,[rsp+0F0h]
00 00
000000000000003A: 48 8D 44 24 70 lea rax,[rsp+70h]
000000000000003F: 45 33 C9 xor r9d,r9d
0000000000000042: 48 89 44 24 40 mov qword ptr [rsp+40h],rax
0000000000000047: 45 33 C0 xor r8d,r8d
000000000000004A: 33 C0 xor eax,eax
000000000000004C: 33 D2 xor edx,edx
000000000000004E: 48 89 44 24 38 mov qword ptr [rsp+38h],rax
0000000000000053: 48 89 44 24 30 mov qword ptr [rsp+30h],rax
0000000000000058: 89 44 24 28 mov dword ptr [rsp+28h],eax
000000000000005C: C7 44 24 20 01 00 mov dword ptr [rsp+20h],1
00 00
0000000000000064: FF 15 00 00 00 00 call qword ptr [__imp_CreateProcessA]
000000000000006A: 33 C0 xor eax,eax
000000000000006C: 48 81 C4 E8 00 00 add rsp,0E8h
00
0000000000000073: C3 ret
Al llamar a CreateProcessA en RSP + 0x20 arrancan los parametros (antes esta el shadow space), en RSP + 0x50 la estructura PROCESS_INFORMATION, en RSP + 0x70 la estructura STARTUPINFOA y en RSP + 0xF0 esta la cadena 'cmd\0'.