我试图打印出bx register
的内容。
print_str
早先定义为:
print_str: db "Result: %d", 10, 0
当我在bx
中弹出debugger
时,我发现3
已放入bx
。但是,在致电printf
后,我获得了output "Result: 196611"
pop bx
push eax
push bx ; substitute with whatever you want to print
push print_str ; defined in the .data section
call printf
add esp, 8 ; pop the Msg and number off the stack
pop eax ; restore the value in eax that we stashed
修改:当我将push bx
替换为push 3
时,会print "Result: 3"
,因此我不会说出push bx
出现的问题:(
答案 0 :(得分:1)
如果您push bx
将16位值推送到堆栈。它不会转换为32位值,堆栈仅递减2(两个字节)。您似乎使用32位C库,其中printf
期望堆栈上的32位值。因此,printf
会将BX
和作为以前推送EAX
的一部分。
将BX
展开到EBX
并推送EBX
:
movsx ebx, bx
push ebx