在ASM中访问命令行参数(Win 7)

时间:2014-02-21 22:52:04

标签: windows assembly nasm

我在使用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)框。

非常感谢任何输入。

1 个答案:

答案 0 :(得分:2)

使用GetCommandLine()

根据this,真正的启动函数(GUI程序中的WinMainCRTSTartup,控制台中的mainCRTSTartup)不会从调用者接收任何参数。最终传递给main / WinMain的命令行是在RTL的xxxCRTStartup实现中通过GetCommandLine()检索的。