判断是否为PE文件改进版
来源:互联网 发布:windows xp万能密钥 编辑:程序博客网 时间:2024/06/05 00:58
原来的程序一遇到0字节的文件就会挂掉,在这里我添加了SEH错误处理代码,完美解决了挂掉的问题!
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data?
hFile dd ?
hMapFile dd ?
lpFile dd ?
.const
szErr db "不是有效的32位程序!",0
szOK db "是可执行文件!",0
szNO db "打开文件失败!",0
szName db "d: .exe",0
Copyright db " www.xbin.cn ",0
.code
_SEH proc _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext
pushad
mov esi,_lpExceptionRecord
mov edi,_lpContext
assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
mov eax,_lpSEH
push [eax + 0ch]
pop [edi].regEbp
push [eax + 8]
pop [edi].regEip
push eax
pop [edi].regEsp
assume esi:nothing,edi:nothing
popad
mov eax,ExceptionContinueExecution
ret
_SEH endp
Start:
;设置SEH
assume fs:nothing
push offset _ErrFormat
push offset _SEH
push fs:[0]
mov fs:[0],esp
;打开文件
invoke CreateFile,offset szName,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,NULL,offset szNO,NULL,MB_OK
JMP _END
.endif
mov hFile,eax
;建立映射文件
invoke CreateFileMapping,hFile,NULL,PAGE_READONLY,0,0,NULL
mov hMapFile,eax
invoke MapViewOfFile,hMapFile,FILE_MAP_READ,0,0,0
mov lpFile,eax
;把映射文件的首地址给ESI
mov esi,eax
assume esi:ptr IMAGE_DOS_HEADER
;判断MZ标志
mov di,[esi].e_magic
mov bx,5a4dh
.if di != bx
invoke MessageBox,NULL,offset szErr,NULL,MB_OK
JMP _END
.endif
;判断PE标志
add esi,[esi].e_lfanew
assume esi:ptr IMAGE_NT_HEADERS
mov edi,[esi].Signature
.if edi != 00004550h
invoke MessageBox,NULL,offset szErr,NULL,MB_OK
JMP _END
.endif
invoke MessageBox,NULL,offset szOK,NULL,MB_OK
assume esi:nothing
JMP _END
_ErrFormat:
invoke MessageBox,NULL,offset szErr,NULL,MB_OK
pop fs:[0]
add esp,0ch
_END:
invoke UnmapViewOfFile,lpFile
invoke CloseHandle,hMapFile
invoke CloseHandle,hFile
invoke ExitProcess,0
end Start
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data?
hFile dd ?
hMapFile dd ?
lpFile dd ?
.const
szErr db "不是有效的32位程序!",0
szOK db "是可执行文件!",0
szNO db "打开文件失败!",0
szName db "d: .exe",0
Copyright db " www.xbin.cn ",0
.code
_SEH proc _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext
pushad
mov esi,_lpExceptionRecord
mov edi,_lpContext
assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
mov eax,_lpSEH
push [eax + 0ch]
pop [edi].regEbp
push [eax + 8]
pop [edi].regEip
push eax
pop [edi].regEsp
assume esi:nothing,edi:nothing
popad
mov eax,ExceptionContinueExecution
ret
_SEH endp
Start:
;设置SEH
assume fs:nothing
push offset _ErrFormat
push offset _SEH
push fs:[0]
mov fs:[0],esp
;打开文件
invoke CreateFile,offset szName,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,NULL,offset szNO,NULL,MB_OK
JMP _END
.endif
mov hFile,eax
;建立映射文件
invoke CreateFileMapping,hFile,NULL,PAGE_READONLY,0,0,NULL
mov hMapFile,eax
invoke MapViewOfFile,hMapFile,FILE_MAP_READ,0,0,0
mov lpFile,eax
;把映射文件的首地址给ESI
mov esi,eax
assume esi:ptr IMAGE_DOS_HEADER
;判断MZ标志
mov di,[esi].e_magic
mov bx,5a4dh
.if di != bx
invoke MessageBox,NULL,offset szErr,NULL,MB_OK
JMP _END
.endif
;判断PE标志
add esi,[esi].e_lfanew
assume esi:ptr IMAGE_NT_HEADERS
mov edi,[esi].Signature
.if edi != 00004550h
invoke MessageBox,NULL,offset szErr,NULL,MB_OK
JMP _END
.endif
invoke MessageBox,NULL,offset szOK,NULL,MB_OK
assume esi:nothing
JMP _END
_ErrFormat:
invoke MessageBox,NULL,offset szErr,NULL,MB_OK
pop fs:[0]
add esp,0ch
_END:
invoke UnmapViewOfFile,lpFile
invoke CloseHandle,hMapFile
invoke CloseHandle,hFile
invoke ExitProcess,0
end Start
- 判断是否为PE文件改进版
- 判断是否为PE文件改进版
- python判断是否为“PE文件”
- 通过DOS头判断一个文件是否为PE文件
- 判断文件是否PE格式
- 判断文件是否非pe文件
- 判断你的文件是否为合法的PE文件和应用类型
- 判断文件是否为合法的PE文件和应用类型
- 判断你的文件是否为合法的PE文件和应用类型
- 判断文件是否PE文件,是否GUI程序
- 判断文件是否为图片
- 判断文件是否为Unicode
- 判断文件是否为图片
- 判断文件是否为图片
- 判断文件是否为二进制
- 判断文件是否为图片
- 【合作】改进判断文本框和组合框是否为空
- 判断一个文件是否为csv文件
- 用Agent+ASP技术制作语音聊天室http://www.23js.net/2632.html
- Flash Media Server 2使用入门基础http://blog.breakn.net/article.asp?id=267
- 蓝牙休闲娱乐平台(毕业设计)第三部份
- RAZZ: 在线录音小工具http://www.wangtam.com/50226711/razz_ce_48250.php
- 对程序调用API变形的一点认识
- 判断是否为PE文件改进版
- JAVA常见异常(收藏)
- 3月8日工作日志-88250
- 蓝牙休闲娱乐平台(毕业设计)第四部份
- timeSetEvent(), QueryPerformance*函数
- 蓝牙休闲娱乐平台(毕业设计)第五部份
- 只能看不能读的文章
- inside the c++ object model 读书笔记(第一章)
- 软件选型 系统技术路线和架构是重点