今日同学问到一个问题,关于下面的汇编程序为什么没有输出?
.386 .model flat,stdcall option casemap:none include Stdlib.Inc includelib Stdlib.lib include kernel32.inc includelib kernel32.lib .data a db 64 dup(0) b db 64 dup(0) len db 0 .code .startup CONSOLE invoke Readln,offset a,offset a,64 mov len,al invoke DwToStr,len,offset b invoke Writeln,offset b .exit 0
拖入X32dbg里面调试,发现我们DwToStr
函数的参数输入有问题,按照道理,al会把输入的字符串长度赋值给len,但是len却以0压栈
经过多次尝试,我们发现DWToXX
类型的API必须要求输入的数值为DWORD格式,否则无法正确处理,因此修改对应len的类型
.386 .model flat,stdcall option casemap:none include Stdlib.Inc includelib Stdlib.lib include kernel32.inc includelib kernel32.lib .data a db 64 dup(0) b db 64 dup(0) len dd 0 .code .startup CONSOLE invoke Readln,offset a,offset a,64 mov len,eax invoke DwToStr,len,offset b invoke Writeln,offset b .exit 0
反汇编调试,发现压栈的是正确的值