如何解决为什么没有其他字符出现?
我有一个函数print
,该函数在寄存器dl
处取字节,并将其作为字符输出到控制台。我将一些字节放入内存中,然后从该内存位置移至dl
并调用print
函数,但是第二次调用该函数时,它不会打印字符(第一次工作正常)。我正在使用Windows 10并组装到64位。
我希望它打印AB
,但仅打印A
push rbp
mov rbp,rsp
mov DWORD [rbp-4],'ABCD'
mov DWORD [rbp-8],'XYZH'
mov dl,BYTE [rbp-4]
call print
mov dl,BYTE [rbp-3]
call print
mov eax,0
pop rbp
ret
以及其中定义的打印功能:
print:
lea rax,var
mov BYTE [rax],dl
sub rsp,8+8+8+32
mov ecx,-11
call GetStdHandle
mov rcx,rax
mov rdx,var
mov r8,1
lea r9,[rsp-16]
mov QWORD [rsp-56],0
call WriteConsoleA
add rsp,8+8+32+8
ret
在数据部分var
中定义 var: db 0
解决方法
call print
指令将覆盖字符!您需要调整RSP
。
如果不降低堆栈指针,则CPU将把call
指令中的返回地址放在您编写字符的位置。
push rbp
mov rbp,rsp
sub rsp,8
mov DWORD [rbp-4],'ABCD'
mov DWORD [rbp-8],'XYZH'
mov dl,BYTE [rbp-4]
call print
mov dl,BYTE [rbp-3]
call print
mov eax,0
mov rsp,rbp
pop rbp
ret
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。