在汇编中读取命令行

时间:2013-07-10 13:36:41

标签: parsing assembly command-line-arguments nasm

我第一次在装配中使用ds,si和字符串相关的指令。我试图通过char读取命令行参数char,这就是我的代码现在的样子:

GetCommandLine:
    push                    ebp
    mov                     ebp,    esp
    push edi
    push esi
    call                    GetCommandLineW
    mov edi, eax
    mov esi, ebp
    Parse:
        lodsw
        cmp                 ax,     0dh ; until return is found
        jne                 Parse
    pop esi
    pop edi
    pop ebp
    ret

因此,GetCommandLineW函数返回一个指向字符串的正确指针。问题是Parse部分永远循环,我看不到AX寄存器正在从字符串中加载正确的下一个字节。我认为 EDI:ESI 未正确加载或

2 个答案:

答案 0 :(得分:1)

esiedi是不同的指针。 ebp用于保存旧堆栈指针,以及用于保存/加载局部变量。 GetCommandLineW将返回eax中的指针,然后您应将其放入esi。由于您仅使用lodsw(而不是stos*),因此无需触及edi

答案 1 :(得分:1)

为什么你认为在命令行中使用了0x0d?返回一个普通的C字符串,所以你应该寻找一个0字节。