我在使用ASM访问命令行参数时遇到问题。 我之前从未遇到过这个问题,所以我有点受到了保护......
我正在使用的汇编程序是NASM。
从 nasm -v 粘贴:
NASM version 2.11 compiled on Dec 31 2013
作为链接器,我使用GOLINK作为链接器。
来自 golink / h 的相关信息:
GoLink.Exe Version 0.28.0.0 - Copyright Jeremy Gordon 2002/12 - JG@JGnet.co.uk
以下是我要修复的代码:
pop edx ; Return pointer
pop ebx ; ARGC
pop ecx ; ARGV
push ebx ; Should push ARGC onto the stack
push digit ; db '%d', 10, 0
call printf ; Call printf
我正在使用以下方式组装:
nasm -f win32 file.asm
使用以下方式进行链接:
golink /console file.obj msvcrt.dll user32.dll kernel32.dll
(我以后在源代码中使用msvcrt.dll,user32.dll和kernel32.dll的函数)
在组装或链接过程中没有错误。
执行 file.exe helloArg1 helloArg2 时,输出为:
2130567168
这显然不是正确数量的论点......
我非常怀疑我已经做了一些简单的事情......
我目前正在运行x64 Win 7(SP 1)框。
非常感谢任何输入。
答案 0 :(得分:2)
使用GetCommandLine()
。
根据this,真正的启动函数(GUI程序中的WinMainCRTSTartup,控制台中的mainCRTSTartup)不会从调用者接收任何参数。最终传递给main / WinMain的命令行是在RTL的xxxCRTStartup实现中通过GetCommandLine()
检索的。