我第一次在装配中使用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 未正确加载或
答案 0 :(得分:1)
esi
和edi
是不同的指针。 ebp
用于保存旧堆栈指针,以及用于保存/加载局部变量。 GetCommandLineW
将返回eax
中的指针,然后您应将其放入esi
。由于您仅使用lodsw
(而不是stos*
),因此无需触及edi
。
答案 1 :(得分:1)
为什么你认为在命令行中使用了0x0d?返回一个普通的C字符串,所以你应该寻找一个0字节。