【问题标题】:Accessing cmdline arguments on 32-bit assembly访问 32 位程序集上的 cmdline 参数
【发布时间】:2021-02-12 11:58:35
【问题描述】:

所以我目前正在尝试使用 masm 获取命令行参数,这是我目前所做的:

.386
.MODEL FLAT

includelib kernel32.lib
includelib msvcrt.lib

__getmainargs PROTO C :DWORD
printf        PROTO C :DWORD

.data
            str_argv     db "argv[1]: %s",0
.fardata?
            argc    dd ?    
            argv    db 255 DUP(?)
            env     dd  ?

.code
START:
            push 0
            push OFFSET env
            push OFFSET argv
            push OFFSET argc
            call  __getmainargs
            add   esp, 4*4 ;4 args
 
            push  [edi]
            push  OFFSET str_argv
            call  printf
            add   esp, 4 * 2 ;2 args

            ret
END START

但是,这会返回一个与 cmdline 参数不对应的垃圾字符串,在本例中为模块名称。

任何想法为什么这不起作用? -> 还有其他方法可以访问 cmdline args 吗?

提前致谢

【问题讨论】:

    标签: windows assembly masm


    【解决方案1】:

    您在没有将正确的值放入 edi 的情况下推送 [edi]

    argv的声明改为argv dd ?

    然后将push [edi]改为:

    mov edi,argv
    push dword ptr [edi+4]
    

    并确保在链接时使用/SUBSYSTEM:CONSOLE 选项。

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 1970-01-01
      • 2013-03-19
      • 2010-12-15
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多