我必须在x86汇编程序中编写Windows程序(我使用平面汇编程序),它将打印预定义内存的内容。我写道:
format PE console 4.0
include "win32ax.inc"
start:
mov eax, [0x00850095]
cinvoke printf,formatstring, eax
invoke Sleep,-1
formatstring db "%#x"
section '.idata' import data readable
library msvcrt,'msvcrt.dll',\
kernel32,'kernel32.dll'
import msvcrt,printf,'printf'
import kernel32,Sleep,'Sleep'
它不起作用:C;你可以帮帮我吗?
答案 0 :(得分:-1)
您的格式字符串不太正确。如果您要打印 eax 的值,"%#x"
应该是"%08X"
。如果要在 eax 中打印位于地址的值,则需要加载 eax 指向的值并将其传递给{ {1}}。
printf的printf
格式说明符需要在varargs中传递%x
,因此如果要一次打印一个字节,则需要将一个字节(零扩展)加载到< em> eax 然后将 eax 传递给int
。