Assembly 程序集printf调用打印错误的值
在我的代码中的这一点上,我知道eax包含12345678,这在我的调试器中是这样说的Assembly 程序集printf调用打印错误的值,assembly,format,printf,Assembly,Format,Printf,在我的代码中的这一点上,我知道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有关,但我不知道如何使它可以无规则地打
push eax
push print_r
call printf
add esp, 8
我的格式字符串是
print_r: db 0Ah, "number: %hd", 10, 0
它不打印12345678,而是打印24910
但是,当eax包含1234时,它会正确打印1234
我感觉它与字符串格式%hd有关,但我不知道如何使它可以无规则地打印数字的大小/符号。这是因为您使用%hd进行打印。
%hd获取16b值并打印,但您提供32b值
发生的情况:您的值是12345678,这意味着0xBC614E。现在因为你使用%HD,Primtf只考虑16b形式,这个数字将被截断到16b,并且打印的值将是0x614e,这正是你的打印值:24910。
2可能的固定:
将%d替换为printf格式%hd
用于在-32769和32768之间的16b上打印数字。
我很确定你是说%ld