首页
社区
课程
招聘
[求助]请看一下这段汇编代码的问题
发表于: 2007-10-19 13:11 4475

[求助]请看一下这段汇编代码的问题

2007-10-19 13:11
4475
网上下载的代码,稍做了一下修改,编译出现了问题
帮忙看一下,谢谢!

.386
.model flat, stdcall
option casemap :none

include                d:\masm32\include\windows.inc
include                d:\masm32\include\user32.inc
include                d:\masm32\include\comdlg32.inc
include                d:\masm32\include\kernel32.inc
include                d:\masm32\include\comctl32.inc

includelib        d:\masm32\lib\comctl32.lib
includelib        d:\masm32\lib\kernel32.lib
includelib        d:\masm32\lib\comdlg32.lib
includelib        d:\masm32\lib\user32.lib

.data  
szFileName    db 260 dup(0)
ofn           OPENFILENAME <>  
lpStrFilter   db "PE Files",0,"*.exe;*.dll",0  
              db "WDM Files",0,"*.sys",0,0  
zTit          db "Hume's PE checkSum 计算器,2K2",0  
initial_dir   db ".",0  

ms000         db "File OPERATION ERR!",0  
fmt           db "The PE-CheckSum of Current file IS:%X",0  
buf           db 256 dup(0)  

.code  
start:
              ;mov      [ofn.lStructSize],ofn.size
              mov       ofn.lStructSize,sizeof OPENFILENAME
              ;mov      [ofn.lpstrFile],buf
              m2m      ofn.lpstrFile,offset szFileName  
              ;mov      [ofn.nMaxFile],256  
              mov      ofn.nMaxFile,sizeof szFileName
              ;mov      [ofn.lpstrFilter],lpStrFilter  
              m2m      ofn.lpstrFilter,lpStrFilter
              ;mov      [ofn.lpstrTitle],zTit
              m2m      ofn.lpstrTitle,zTit
              ;mov      [ofn.lpstrInitialDir],initial_dir  
              mov      [ofn.Flags],81000h  
              invoke   GetOpenFileName,ADDR ofn
              or       eax,eax  
              je       exit  
              mov      eax,ofn.lpstrFile  
;              invoke   CreateFile,[ofn.lpstrFile],0x80000000,0,0,3,0,0  
              invoke   CreateFile,ofn.lpstrFile,0x80000000,0,0,3,0,0
              inc      eax  
              je       err  
              
              dec      eax  
              push     eax  
              invoke   GetFileSize,eax,0  
              push     eax  
              push     eax  
              invoke   VirtualAlloc,0,eax,1000h,4  
              or       eax,eax  
              je       err  
              pop      ecx  
              push     eax  
              mov      esi,eax  
              mov      edx,[esp+8]
              invoke   ReadFile,edx,eax,ecx,esp,0  
              mov      edi,[esi+3ch]
              add      edi,esi  
              ;mov      dword [edi+peh.CheckSum],0  ; modified
              mov      dword ptr[edi+5ch],0  ; modified
              mov      ecx,[esp+4]
              inc      ecx  
              shr      ecx,1  
              xor      ebp,ebp  
              clc  
cal_checksum:
              adc      bp,word ptr[esi]
              inc      esi  
              inc      esi  
              loop     cal_checksum  
              mov      ebx,[esp+4]
              add      ebp,ebx  
              pop      eax  
              invoke   VirtualFree,eax,ebx,4000h  
              pop      eax  
              pop      eax  
              invoke   CloseHandle,eax  
              invoke   wsprintf,buf,fmt,ebp  
              invoke   MessageBox,0,buf,zTit,40h  
              jmp      exit
err:
              invoke   MessageBox,0,ms000,zTit,20h  
exit:
              invoke   ExitProcess,0  
end start

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 299
活跃值: (25)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
.386
.model flat, stdcall
option casemap :none
m2m macro M1, M2
    push M2
    pop M1
endm
include    d:\masm32\include\windows.inc
include    d:\masm32\include\user32.inc
include    d:\masm32\include\comdlg32.inc
include    d:\masm32\include\kernel32.inc
include    d:\masm32\include\comctl32.inc

includelib  d:\masm32\lib\comctl32.lib
includelib  d:\masm32\lib\kernel32.lib
includelib  d:\masm32\lib\comdlg32.lib
includelib  d:\masm32\lib\user32.lib

.data  
szFileName    db 260 dup(0)
ofn           OPENFILENAME <>  
lpStrFilter   db "PE Files",0,"*.exe;*.dll",0  
              db "WDM Files",0,"*.sys",0,0  
zTit          db "Hume's PE checkSum 计算器,2K2",0  
initial_dir   db ".",0  

ms000         db "File OPERATION ERR!",0  
fmt           db "The PE-CheckSum of Current file IS:%8x",0  
buf           db 256 dup(0)  

.code  
start:
              ;mov      [ofn.lStructSize],ofn.size
              mov       ofn.lStructSize,sizeof OPENFILENAME
              ;mov      [ofn.lpstrFile],buf
              m2m      ofn.lpstrFile,offset szFileName  
              ;mov      [ofn.nMaxFile],256  
              mov      ofn.nMaxFile,sizeof szFileName
              ;mov      [ofn.lpstrFilter],lpStrFilter  
              m2m      ofn.lpstrFilter,offset lpStrFilter
              ;mov      [ofn.lpstrTitle],zTit
              m2m      ofn.lpstrTitle,offset zTit
              ;mov      [ofn.lpstrInitialDir],initial_dir  
              mov      [ofn.Flags],81000h  
              invoke   GetOpenFileName,ADDR ofn
              or       eax,eax  
              je       exit  
              mov      eax,ofn.lpstrFile  
;              invoke   CreateFile,[ofn.lpstrFile],0x80000000,0,0,3,0,0  
              invoke   CreateFile,ofn.lpstrFile,080000000h,0,0,3,0,0
              inc      eax  
              je       err  
              
              dec      eax  
              push     eax  
              invoke   GetFileSize,eax,0  
              push     eax  
              push     eax  
              invoke   VirtualAlloc,0,eax,1000h,4  
              or       eax,eax  
              je       err  
              pop      ecx  
              push     eax  
              mov      esi,eax  
              mov      edx,[esp+8]
              invoke   ReadFile,edx,eax,ecx,esp,0  
              mov      edi,[esi+3ch]
              add      edi,esi  
              ;mov      dword [edi+peh.CheckSum],0  ; modified
              mov      dword ptr[edi+5ch],0  ; modified
              mov      ecx,[esp+4]
              inc      ecx  
              shr      ecx,1  
              xor      ebp,ebp  
              clc  
cal_checksum:
              adc      bp,word ptr[esi]
              inc      esi  
              inc      esi  
              loop     cal_checksum  
              mov      ebx,[esp+4]
              add      ebp,ebx  
              pop      eax  
              invoke   VirtualFree,eax,ebx,4000h  
              pop      eax  
              pop      eax  
              invoke   CloseHandle,eax  
              invoke   wsprintf,offset buf,offset fmt,ebp  
              invoke   MessageBox,0,offset buf,offset zTit,40h  
              jmp      exit
err:
              invoke   MessageBox,0,offset ms000,offset zTit,20h  
exit:
              invoke   ExitProcess,0  
end start
2007-10-19 14:52
0
雪    币: 299
活跃值: (25)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
3
汗,改了好几次,看来楼上的朋友对指针不够了解,很少用C语言罢?
2007-10-19 15:07
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
问题快要解决了:)
最近一直用Delphi比较多些。

还有个细节的问题还没搞懂,运行的时候,
打开文件的对话框一直在左上角,怎么让窗口
到中间来呢?

2007-10-19 15:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
limee,看来我们水平在一个档次上,我也刚开始学MASM32编程,有兴趣的加我QQ:4683981,一起进步吧
2007-10-19 15:37
0
游客
登录 | 注册 方可回帖
返回
//