Java教程

X86汇编 使用DwToXX类型API的注意问题

本文主要是介绍X86汇编 使用DwToXX类型API的注意问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

今日同学问到一个问题,关于下面的汇编程序为什么没有输出?

    .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

img

拖入X32dbg里面调试,发现我们DwToStr函数的参数输入有问题,按照道理,al会把输入的字符串长度赋值给len,但是len却以0压栈

img

经过多次尝试,我们发现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

img

反汇编调试,发现压栈的是正确的值

img

 

这篇关于X86汇编 使用DwToXX类型API的注意问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!