• 汇编——NT中读取MBR内容


    ;**************************************************
    ;
    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.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\advapi32.lib

    ShowError proto :DWORD
    ShowBuffer 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  endp

    ShowBuffer  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
  • 相关阅读:
    收藏夹
    获取某个元素在页面上的偏移量
    React多行文本溢出处理(仅针对纯文本)
    react
    CDN初学搭建(ats)
    linux查看cpu、内存、版本信息
    MySQL5.6版本性能调优my.cnf详解
    How to install cacti on centos 6
    win10安装.net3.5 报错解决
    CentOS6.5安装Cacti统计图乱码解决
  • 原文地址:https://www.cnblogs.com/yequan/p/1631717.html
Copyright © 2020-2023  润新知