80x86汇编程序printf内存的内容

时间:2014-01-21 16:22:47

标签: windows assembly memory x86 printf

我必须在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;你可以帮帮我吗?

1 个答案:

答案 0 :(得分:-1)

您的格式字符串不太正确。如果您要打印 eax 的值,"%#x"应该是"%08X"。如果要在 eax 中打印位于地址的值,则需要加载 eax 指向的值并将其传递给{ {1}}。

printf的printf格式说明符需要在varargs中传递%x,因此如果要一次打印一个字节,则需要将一个字节(零扩展)加载到< em> eax 然后将 eax 传递给int