format - assembly printf call printing wrong value -
at point in code know eax contains 12345678 (says in debugger)
push eax push print_r call printf add esp, 8
my format string is
print_r: db 0ah, "number: %hd", 10, 0
instead of printing 12345678, prints 24910
when eax contains 1234 however, correctly prints 1234
i have feeling has string formating %hd, don't know make can print reguardless of how big/ sign number is.
this because use %hd
printing. %hd
takes 16b value , print it, provide 32b values.
what happening: value 12345678 means 0xbc614e. because use %hd
, printf
consider 16b form number (number truncated 16b) , value printed 0x614e printed value: 24910.
2 possible fixed:
- replace printf format "%hd" "%d"
- use printing number on 16b (between -32769 , 32768).
Comments
Post a Comment