能力值:
( LV2,RANK:10 )
3 楼
如下是我尝试的操作,但并不能解决问题,也不知哪一步出错,导至相对路径总不成。
我用的是版本是RedAsm2.2.0.9,默认的环境变量是c:\masm32\bin;
在设置路径中分别作了如下尝试
1:
$R\masm32\Include
$R\masm32\lib
2:
$A\masm32\Include
$A\masm32\lib
3:
\masm32\Include
\masm32\lib
测试代码如下:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\comdlg32.lib
SEH struct
PrevLink dd ? ; the address of the previous seh structure
CurrentHandler dd ? ; the address of the new exception handler
SafeOffset dd ? ; The offset where it's safe to continue execution
PrevEsp dd ? ; the old value in esp
PrevEbp dd ? ; The old value in ebp
SEH ends .data
AppName db "PE tutorial no.2",0
ofn OPENFILENAME <>
FilterString db "Executable Files (*.exe, *.dll)",0,"*.exe;*.dll",0
db "All Files",0,"*.*",0,0
FileOpenError db "Cannot open the file for reading",0
FileOpenMappingError db "Cannot open the file for memory mapping",0
FileMappingError db "Cannot map the file into memory",0
FileValidPE db "This file is a valid PE",0
FileInValidPE db "This file is not a valid PE",0
.data?
buffer db 512 dup(?)
hFile dd ?
hMapping dd ?
pMapping dd ?
ValidPE dd ?
.code
start proc
LOCAL seh:SEH
mov ofn.lStructSize,SIZEOF ofn
mov ofn.lpstrFilter, OFFSET FilterString
mov ofn.lpstrFile, OFFSET buffer
mov ofn.nMaxFile,512
mov ofn.Flags, OFN_FILEMUSTEXIST or \
OFN_PATHMUSTEXIST or OFN_LONGNAMES or\
OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, ADDR ofn
.if eax==TRUE
invoke CreateFile, addr buffer, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
.if eax!=INVALID_HANDLE_VALUE
mov hFile, eax
invoke CreateFileMapping, hFile, NULL, PAGE_READONLY,0,0,0
.if eax!=NULL
mov hMapping, eax
invoke MapViewOfFile,hMapping,FILE_MAP_READ,0,0,0
.if eax!=NULL
mov pMapping,eax
assume fs:nothing
push fs:[0]
pop seh.PrevLink
mov seh.CurrentHandler,offset SEHHandler
mov seh.SafeOffset,offset FinalExit
lea eax,seh
mov fs:[0], eax
mov seh.PrevEsp,esp
mov seh.PrevEbp,ebp
mov edi, pMapping
assume edi:ptr IMAGE_DOS_HEADER
.if [edi].e_magic==IMAGE_DOS_SIGNATURE
add edi, [edi].e_lfanew
assume edi:ptr IMAGE_NT_HEADERS
.if [edi].Signature==IMAGE_NT_SIGNATURE
mov ValidPE, TRUE
.else
mov ValidPE, FALSE
.endif
.else
mov ValidPE,FALSE
.endif
FinalExit:
.if ValidPE==TRUE
invoke MessageBox, 0, addr FileValidPE, addr AppName,MB_OK+MB_ICONINFORMATION
.else
invoke MessageBox, 0, addr FileInValidPE, addr AppName,MB_OK+MB_ICONINFORMATION
.endif
push seh.PrevLink
pop fs:[0]
invoke UnmapViewOfFile, pMapping
.else
invoke MessageBox, 0, addr FileMappingError, addr AppName,MB_OK+MB_ICONERROR
.endif
invoke CloseHandle,hMapping
.else
invoke MessageBox, 0, addr FileOpenMappingError, addr AppName,MB_OK+MB_ICONERROR
.endif
invoke CloseHandle, hFile
.else
invoke MessageBox, 0, addr FileOpenError, addr AppName, MB_OK+MB_ICONERROR
.endif
.endif
invoke ExitProcess, 0
start endp
SEHHandler proc uses edx pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD
mov edx,pFrame
assume edx:ptr SEH
mov eax,pContext
assume eax:ptr CONTEXT
push [edx].SafeOffset
pop [eax].regEip
push [edx].PrevEsp
pop [eax].regEsp
push [edx].PrevEbp
pop [eax].regEbp
mov ValidPE, FALSE
mov eax,ExceptionContinueExecution
ret
SEHHandler endp
end start
总是报这样的错:
C:\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"masm32\Include" "E:\软件\加解密\PE格式\PE-tut02\pe-tut02.asm"
Assembling: E:\软件\加解密\PE格式\PE-tut02\pe-tut02.asm
E:\软件\加解密\PE格式\PE-tut02\pe-tut02.asm(4) : fatal error A1000: cannot open file : \masm32\include\windows.inc
构建时发生错误.
总共编译时间 31 毫秒
能力值:
( LV2,RANK:10 )
5 楼
先是看了RedAsm的帮助,知道R表示在RedAsm目录中,然后看了你的文章,
设置路径:$R\masm32\Include
$R\masm32\Include,发现还是不行,然后将那个asm文件放入C:\RedAsm目录下重新加载运行即可。
但我不可能每次要编译asm程序都要放入RedAsm目录下啊,那样还不如手动改程序中的相对路径为绝对路径呢。
我还有哪儿没有弄对呢?
本人RedAsm版本:2.2.0.9
安装目录:c:\RedAsm
masm32目录:c:\masm32
能力值:
(RANK:990 )
6 楼
既然你知道 $R 表示 RadASM 的目录,怎么还会这么设置?$R\masm32\Include 按你提供的安装目录来说就是 C:\RadASM\masm32\Include,你的Masm32装在C:\Masm32目录下,你说你这样设置对吗?用记事本打开你RadASM目录下的masm.ini,找到[paths]段,改成这样:
[Paths]
$A=C:\Masm32
$B=$A\Bin
$D=$R\AddIns
$H=$A\Help
$I=$A\Include
$L=$A\Lib
$P=$R\Masm\Projects
$S=$R\Masm\Sniplets
$T=$R\Masm\Templates
$M=$R\Masm\Macro
$E=
上面最后那个$E是设置调试器路径的,按你调试器安装目录来设置。
能力值:
( LV9,RANK:780 )
7 楼
我现在用的也是RadASM
看看我的安装,我的系统装在C盘,我经常用GHOST重装系统
为了数据安全,我安装在D盘,你可以随便指定,但最好别放在系统盘
第1步:安装masm32在D盘,安装完后,所在文件夹就是"D:/masm32"
第2步:把下载回来的RedAsm解压到D盘,安装文件夹就是“D:/RedAsm”
第3步:打开RedAsm文件夹,也就是“D:/RedAsm”,找到一个名为masm.ini的配
置文件,搜索“paths”,找到下面的一段:
[Paths]
$A=C:\Masm32
$B=$A\Bin
$D=$R\AddIns
$H=$A\Help
$I=$A\Include
$L=$A\Lib
$P=$R\Masm\Projects
$S=$R\Masm\Sniplets
$T=$R\Masm\Templates
$M=$R\Masm\Macro
$E=C:\OllyDbg
把上面$A后面的改为Masm32的实际安装文件夹,这里改为
\Masm32,如果你装了OD调试器把最后一行改为OD所在文件夹,这样以后的编
译的程序就可以直接在调试器中运行,保存文件,OK,一切就序,现在汇遍也能可视化编程了!
另外还有一点,如果装有VC的话,Masm32可能会把库文件或头文件放到VC的文件夹里(可以用Windows自带的搜索功能找到这些文件)这一点要注意!如果出现这种情况,自己把库文件(*.LIB)或(*.INI)头文件分别COPY到Masm32下的的lib和include目录即可!