0

我第一次在汇编中使用 ds、si 和字符串相关指令。我正在尝试逐字符读取命令行参数,这就是我的代码现在的样子:

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未正确加载或其他

4

2 回答 2

1

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

于 2013-07-10T13:42:51.887 回答
1

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

于 2013-07-10T13:59:33.590 回答