汇编——NT中读取MBR内容

it2022-05-09  31

 

; ************************************************** ; ReadMBROnDiskNT.asm ; 功能:Windows NT、2K、XP中读MBR ;        ; ************************************************** .386p.model flat, stdcall       ; 平坦内存模式 option casemap :none    ;  大小写敏感 ; *************************************************** include \masm32\include\windows. inc include \masm32\include\user32. inc include \masm32\include\kernel32. inc include \masm32\include\advapi32. inc       includelib \masm32\lib\user32.libincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\advapi32.libShowError proto :DWORDShowBuffer proto .data                             ; 数据段     FileName db  ' \\.\PHYSICALDRIVE0 ' , 0    ; 打开第一个物理硬盘     align  4                  ; 双字对齐     readed    dd   0            ; 实际读出的字节数     Buffer    db   512  dup ( 0 )   ; 存放读出的数据的缓冲区     hFile         dd   0            ; 句柄存放处         Caption        db  ' NT中读写物理磁盘 ' , 0        ; Caption的字符串     ErrCreate    db    ' 建文件错,该程序不能在Win9X下执行! ' , 0     ; 出错信息     ErrRead        db  ' 读盘错误! ' , 0                             ; 出错信息         ShowText    db    4096 * 3  dup ( 0 )                ; 转换后用于显示的字符串     Number    db  ' 0123456789ABCDEF '             ; 16进制数转换为ACSII码要用到的数据 .code                                                 ; 代码段 main:      ; 建立文件     invoke CreateFile,offset FileName,\GENERIC_READ,FILE_SHARE_READ  OR  FILE_SHARE_WRITE,\NULL,OPEN_EXISTING,NULL,NULL     mov   [hFile],eax     cmp   eax,INVALID_HANDLE_VALUE     jnz   read    invoke ShowError,offset ErrCreate             ; 显示错误信息 read:                                                 ; 读数据     invoke ReadFile,eax,offset Buffer, 512 ,offset readed,NULL     cmp   eax, 0      jnz   show    invoke ShowError,offset ErrRead             ; 显示错误信息 show:                                                    invoke ShowBuffer                            ; 显示读出的内容     invoke CloseHandle ,[hFile]                     ; 关闭文件句柄     invoke ExitProcess, 0                              ; 退出 ShowError  proc , MESSAGE: DWORD                        ; 显示出错信息并退出     invoke MessageBoxA,NULL,MESSAGE,offset Caption,MB_OK     cmp   [hFile], 0      jz    ShowErrorEnd    invoke CloseHandle ,[hFile]     ; 关闭句柄 ShowErrorEnd:     invoke ExitProcess, 0          ; 退出 ShowError  endpShowBuffer  proc                             ; 显示所读出的信息                                              ; 把16进制数据转换成ASCII码的形式      mov   esi,offset Buffer         ; 数据      mov   edi,offset ShowText      ; 转换后的数据      mov   ebx,offset Number     mov   ecx, 0      xor   eax,eax Again:      cmp   [readed], 0      jz    ConversionEnd     dec   [readed]     mov   al,[esi]     push  eax              shr   eax, 4                       ; 高4位      mov   al,[ebx+eax]     mov   byte ptr[edi],al              inc   edi     pop   eax     and   eax,0FH                 ; 低4位               mov   al,[ebx+eax]     mov   byte ptr[edi],al inc   edi              mov   byte ptr[edi], '   '          ; 空格      inc   edi              inc   esi              inc   ecx     cmp   ecx, 16      jnz   Again     xor   ecx,ecx     mov   byte ptr[edi- 1 ], 13          ; 是回车      jmp   Again ConversionEnd: ; 显示转换后的字符串     invoke MessageBoxA,NULL,offset ShowText,offset Caption,MB_OK     ret ShowBuffer  endp    end main

 

 

转载于:https://www.cnblogs.com/yequan/archive/2009/12/24/1631717.html

相关资源:数据结构—成绩单生成器

最新回复(0)