此时在我的代码中我知道eax包含12345678(在我的调试器中说的是这样)
push eax
push print_r
call printf
add esp, 8
我的格式字符串是
print_r: db 0Ah, "number: %hd", 10, 0
而不是打印12345678,它打印24910
当eax包含1234时,它会正确打印1234
我有一种感觉它与字符串格式化%hd有关,但我不知道如何做到这一点,所以它可以打印无论数字的大小/符号是什么。
答案 0 :(得分:0)
这是因为您使用%hd
进行打印。
%hd
取16b值并打印出来,但是你提供了32b的值。
发生了什么:您的值是12345678,这意味着0xBC614E。现在因为你使用%hd
,printf
只考虑16b这个数字(数字将被截断为16b),打印的值将是0x614e,这正是你的打印值:24910。
2可能已修复: