如何索引malloc'd缓冲区和输出

时间:2015-04-20 19:58:38

标签: windows assembly buffer nasm

请参阅full code here

我已经用fread电话填充了一个缓冲区(malloc' d),这是成功的。我现在正试图迭代缓冲区并开始解析输入。我试着通过走缓冲区并将每个字符输出到屏幕来开始非常简单。但我的循环只是输出整个输入。这是代码的循环部分:

mov     ecx,    0
mov     ebx,    buffer
.readByte:
    push    DWORD   [ebx + 1 * ecx]
    push    DWORD   ecx
    push    DWORD   char
    call    _printf
    add     esp,        12

    incr    ecx

    cmp     ecx,        [fsz]
    jge     .endRead

    jmp     .readByte

在(s1.txt)中读取的源文件的内容是:

  

1 + 2;

我的目标是简单输出:

  

1

     

+

     

2
  ;

1 个答案:

答案 0 :(得分:2)

由于您使用的%s格式表示字符串,而没有长度说明符,为什么您希望它只打印一个字符?您应该尝试使用%c格式和类似movzx eax, byte [ebx + ecx]; push eax的内容来传递参数。 %.1s格式说明符也可以工作,然后你可以保持你的参数传递。如果你想要,也不要忘记添加换行符。当然,您也可以使用putchar

哦,ecx是一个调用者保存的寄存器,因此你调用的任何函数都可能会破坏它的值。因此,如果您想继续使用它,您需要自己保存并恢复它。