【发布时间】:2014-08-05 05:44:57
【问题描述】:
我的代码有一些问题。我正在尝试读取可执行文件中的两个 PE 标头。但是,当我调用 ReadFile 时,它会将 [hFile] 设置为 5A,这不是我从 CreateFile 放入的句柄。据我了解,ReadFile 不应以任何方式改变这一点。但是,当我将句柄存储在另一个变量中并使用它来设置文件指针时,下一条ReadFile 指令仍然给我MZ 标头而不是PE 标头,它位于距@ 偏移3C 处987654327@标头。
总结:ReadFile 更改了我的句柄,SetFilePointer 将更改视为无效句柄,SetFilePointer 在给定有效句柄时不会更改下一次读取的指针。
format PE console 4.0
entry start
include 'win32ax.inc'
section '.data' data readable writeable
thisFile db "thisfile.exe",0
read db ?
hFile dd ?
section '.text' data readable executable
start:
;========Open File================
invoke CreateFile,thisFile,GENERIC_READ,FILE_SHARE_READ,0,\
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
mov [hFile],eax
;========MZ HEADER================
invoke ReadFile,[hFile],read,2,NULL,0 ; = MZ, , however, changes [hFile]
;to 5A? Why does it change it?
invoke printf,read
;========PE HEADER================
invoke SetFilePointer,[hFile],03Ch,0,FILE_CURRENT ; = 0, beginning of file ATM
;Should make next read = PE
invoke ReadFile,[hFile],read,3,NULL,0 ; = PE
invoke printf,read
invoke getchar
invoke ExitProcess,0
【问题讨论】:
标签: windows file assembly x86 fasm