Я просто пытаюсь распечатать значение argc , используя функцию API окна CommandLineToArgvW в NASM.Вот что у меня есть:
extern _ExitProcess@4
extern _GetCommandLineA@0
extern _CommandLineToArgvW@8
extern printf
global _start
section .code
Format:
db "%d",10,0
FormatS:
db "%s",10,0
_start:
push ebp
mov ebp, esp
sub esp, 4 ; Create empty space for ArgC
call _GetCommandLineA@0
push eax; Push value beneath ArgC
mov ebx, ebp ; Set ebx to ebp
sub ebx, 4
push dword ebx ; pushes ArgC address onto stack
push dword [ebp - 8] ; pushes pointer to Command Line String
call _CommandLineToArgvW@8
push dword [ebp - 4]
push Format
call printf
push dword 0
call _ExitProcess@4
Независимо от того, что я делаю, значение для argc равно 1. Что я делаю не так?
Я собираю и связываю с этими командами:
nasm -fwin32 FunctionTests.asm
golink FunctionTests.obj kernel32.dll msvcrt.dll shell32.dll /console /entry _start
FunctionTests.exe hi asdf asdf asdf asdf
Как видно, из последней строки argc должно быть 6.