我理解缓冲区的一般抽象概念:它是在处理数据之前在内存中分配的一个容器。我正在尝试完成一项作业问题,该问题要求我在过程中将ASCII字符串写入缓冲区。因此,我理解当调用该过程时,我应该传递一个数组地址给过程,例如...
main PROC
mov EAX, packed ; pass a packed decimal to EAX
mov ESI, OFFSET ascArray ; pass the offset of an empty array to ESI
call PackedToAsc ; call the function
所以该函数应返回“指向带有ASCII十进制字符串的缓冲区的指针”。我可能有点愚蠢,在这种情况下,不太清楚缓冲区究竟是什么。
- 它是一个数组吗?
- 我需要在
.data
部分中声明它吗? - 如何在过程内声明指向ASCII字符串的指针?
- 在这个上下文中,缓冲区是什么意思?
更实际地说,当该过程完成时,我需要访问数据被放入的缓冲区,但我不确定如何做到这一点。
编辑 -- 我在x86上使用MASM。
fastcall
是一种被调用者弹出参数的约定,在调用后,控制权重新回到调用者时,栈上的参数已经被移除。因此,我们需要将传入的EDX参数保存在某个地方,而不是使用pop edx
来恢复原始的size_t len
。(例如,在分配VLA之前将其推入栈中,这样它就位于[ebp-4]
处。) - Peter Cordes