主题:菜鸟提问帖-编译总提示错误,搞了好久也没搞明白,望指点
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;处理导入表模块
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const
szname db '动态链接库名称: %s',0dh,0ah
szError db '无导入函数 !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcessImportTable proc _lpFile,_lpPeHead,_dwSize
local @szBuffer[1024]:byte,@szSectionName[16]:byte
pushad
mov edi,_lpPehead
assume edi:ptr IMAGE_NT_HEADER ;获取nt头
mov eax,[edi].OptionalHeader.DataDirectory[8].VirtualAddress
.if ! eax ;判断是否存在导入表
invoke MessageBox,hWinMain,addr szError,NULL,MB_OK
jmp _ret
.endif
inovke _RVAToOffset, _lpFile, eax ;将dos头以及导入表的内存地址转换为
add eax,_lpFile ;获得导入表实际地址
mov edi,eax ;先将导入表地址送给edi,然后使其指向导入表结构
assume edi:ptr IMAGE_IMPORT_DESCRIPTOR ;edi指向了导入表结构
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;循还显示dll文件名,直到遇到全为0结束
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.While [edi].OriginalFristThunk || [edi].TimeDateStamp || \
[edi].ForwarderChain || [edi].Name1 || [edi].FirstThunk
invoke _RVAToOffset,_lpFile,[edi].Name1
;add eax,_lpfile
invoke wsprintf,[edi].Name1
_ret
assume edi:noting
popad
ret
_ret endp
_processImportTable endp
错误提示如下
Assembling: Main.asm
_ProcessImportTable.asm(23) : error A2008: syntax error : _RVAToOffset
_ProcessImportTable.asm(33) : error A2006: undefined symbol : _RVAToOffset
_ProcessImportTable.asm(39) : error A2008: syntax error : _ret
_ProcessImportTable.asm(40) : error A2006: undefined symbol : noting
_ProcessImportTable.asm(40) : error A2158: type is wrong size for register
_ProcessImportTable.asm(43) : fatal error A1010: unmatched block nesting : _ret
NMAKE : fatal error U1077: 'ml' : return code '0x1'
Stop.
;处理导入表模块
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const
szname db '动态链接库名称: %s',0dh,0ah
szError db '无导入函数 !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcessImportTable proc _lpFile,_lpPeHead,_dwSize
local @szBuffer[1024]:byte,@szSectionName[16]:byte
pushad
mov edi,_lpPehead
assume edi:ptr IMAGE_NT_HEADER ;获取nt头
mov eax,[edi].OptionalHeader.DataDirectory[8].VirtualAddress
.if ! eax ;判断是否存在导入表
invoke MessageBox,hWinMain,addr szError,NULL,MB_OK
jmp _ret
.endif
inovke _RVAToOffset, _lpFile, eax ;将dos头以及导入表的内存地址转换为
add eax,_lpFile ;获得导入表实际地址
mov edi,eax ;先将导入表地址送给edi,然后使其指向导入表结构
assume edi:ptr IMAGE_IMPORT_DESCRIPTOR ;edi指向了导入表结构
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;循还显示dll文件名,直到遇到全为0结束
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.While [edi].OriginalFristThunk || [edi].TimeDateStamp || \
[edi].ForwarderChain || [edi].Name1 || [edi].FirstThunk
invoke _RVAToOffset,_lpFile,[edi].Name1
;add eax,_lpfile
invoke wsprintf,[edi].Name1
_ret
assume edi:noting
popad
ret
_ret endp
_processImportTable endp
错误提示如下
Assembling: Main.asm
_ProcessImportTable.asm(23) : error A2008: syntax error : _RVAToOffset
_ProcessImportTable.asm(33) : error A2006: undefined symbol : _RVAToOffset
_ProcessImportTable.asm(39) : error A2008: syntax error : _ret
_ProcessImportTable.asm(40) : error A2006: undefined symbol : noting
_ProcessImportTable.asm(40) : error A2158: type is wrong size for register
_ProcessImportTable.asm(43) : fatal error A1010: unmatched block nesting : _ret
NMAKE : fatal error U1077: 'ml' : return code '0x1'
Stop.