0

First time I play with ds, si and strings related instructions in assembly. I am trying to read the command line arguments char by char and this is how my code looks like now:

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

So, the GetCommandLineW function returns a correct pointer to the string. The problem is that the Parse section loops forever and I can't see the AX register being loaded with the correct next byte from the string. I think the EDI:ESI is not correctly loaded or something

4

2 に答える 2

1

esiediは異なるポインターです。ebp古いスタック ポインターの保存、およびローカル変数の保存/読み込みに使用されます。GetCommandLineWは にポインタを返します。eaxこれを に入れる必要がありますesi。のみを使用しているためlodsw( を使用していないためstos*)、 に触れる必要はありませんedi

于 2013-07-10T13:42:51.887 に答える
1

コマンドラインで 0x0d が使用されるのはなぜだと思いますか? 通常の C 文字列が返されるので、0 バイトを探す必要があります。

于 2013-07-10T13:59:33.590 に答える