《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 匯編源代碼之獲得操作系統版本

匯編源代碼之獲得操作系統版本

2017-07-23
關鍵詞: 匯編語言

dos下可以調用DOS中斷服務程序,

WINDOWS下可以調用 API 函數GetVersionEx()

這是我測試PE格式的STUB的源代碼, 可以在DOS和WINDOWS下運行,其功能是報告當前OS信息.

; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; FileName: os_type.asm
; function: Reports current operation system type
; Author : Purple Endurer
; Version : 0.1
;
; OS Name   Offset of INT 08h  Offset of INT 43h
; -------------------------------------------------------
; MS DOS 7.00 001Fh        5710h
; MS DOS 7.10 18DEh        6EE5h
; UCDOS    1AF3h
; UCDOS98   1AEBh        6E20h
; MSDOS mode  0000h
; PDOS95    0A50h        6E20h
;
; Date     Summary
; -------------------------------------------------------
; 2002.04.07  Created from software paper 95P125
; 2002.06.11  Show version if os is MS-DOS
; 2002.08.07  Convert it to DOS EXE format to be stub
;       program in PE format execute file
; 2004.02.09  Added the condition asm var 'UseStack'
;       Question:
;       Why can this program run normally with stack segment,
;       though there is push and pop instruction in bin2dec proc?
  UseStack    equ 0
data  segment
     strMSDOS  db "MS DOS "
     cMajorVer db ' '
          db '.'
     cMinorVer db "  $"
  strUCDOS  db "UCDOS"
     cUCDOSVer db " 98特別版$"
  strPDOS95 db "Windows95中文DOS方式PDOS95$"
data ends
  if UseStack
     sseg segment stack
         db 10 dup(?)
     sseg ends
endif
code  segment
;--------------------------------------
if UseStack
    assume cs: code, ds: data, ss: sseg
else
    assume cs: code, ds: data
endif
  main proc
start:
    mov ax, data
    mov ds, ax
  if UseStack
    mov ax, sseg
    mov ss, ax
endif
   mov ah, 30h ; Get Version
    int 21h
    add al, '0'
    mov cMajorVer, al
    mov bx, offset cMinorVer
    call bin2dec
   mov ax, 3508h
    int 21h
   mov dx, offset strMSDOS
    mov ah, 09h
    int 21h
   cmp bx, 1fh
    je  @end ;Here is DOS 7.00 only
    cmp bx, 18deh
    je  @End ;Here is DOS 7.10 only
   mov dx, offset strUCDOS
    cmp bx, 1aebh
    je  @Report
   cmp bx, 1af3h
    jne @next2
    mov cUCDOSVer, '$'
    jmp @report
  @next2:
   mov dx, offset strPDOS95
    cmp bx, 0a50h
    jne  @End
@Report:
    ;mov ah, 09h
    int 21h
@End:
    mov ax, 4c00h
    int 21h
main endp
  ; ========================================================
; Input : AH = the Binary will be translated)
;     BX = First offset of memory us to store the result
; Output: BX = First offset of memory stored the result
; --------------------------------------------------------
bin2dec proc
    push dx
    mov dl, 10
@LoopDiv:
    mov al, ah
    xor ah, ah
    div dl   ; (AL) <- (AX) / (DL)  (AH) <- (AX) % (DL)
    add al, '0'
    mov [bx], al
    inc bx
    cmp ah, 10
    jg @LoopDiv
  add ah, '0'
    mov [bx], ah
    pop dx
    ret
bin2dec endp
;=========================================
code ends
    end main
  ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;FileName: StubDemo.asm
; Fuction: Demo how to use the custome stub of PE exe files.
; Author: Purple Endurer
stub
;The command line refered cursom STUB program:
;\masm32\bin\link /stub:<filename.exe> /subsystem:windows <objectname.obj>
;Example:
;D:\masm32v6\WORKS\my_stub>\masm32\bin\link /stub:stub.exe /subsystem:windows stubdemo.obj
;Microsoft (R) Incremental Linker Version 5.12.8078
;Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
  ;stub.exe : warning LNK4060: stub file missing full MS-DOS header; rebuild stub with /KNOWEAS 16-bit LINK option
  ; Date     Summary
; -------------------------------------------------------
; 2002.04.07  Created!
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  .386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
  bDetailInfo     equ 0
  .data
szMsgBoxTitle    db "當前操作系統",0
if  bDetailInfo   ;?????? bDetailInfo
   szWin31       db "Win32s on Windows 3.1 ", 0
   szWin9x       db "Win32 on Windows 95 ", 0
else
   szWin31       db "Windows 3.1 ", 0
   szWin9x       db "Windows 95 ", 0
endif          ;?????? bDetailInfo
  szWinNT       db "Windows NT ", 0
  szFormat4OsVer   db "%lu.%lu.%lu", 0
szGetOsInfoFail   db "取操作系統信息失敗!", 0
  .data?
OsVer        OSVERSIONINFO <>
szOsVerInfo     db  255 dup (?)
szOsVerInfoTmp   db  255 dup (?)
  .code
start:
       mov  OsVer.dwOSVersionInfoSize, SIZEOF OSVERSIONINFO
       invoke GetVersionEx, ADDR OsVer

       .if  eax
          mov eax, OsVer.dwPlatformId

          ;Identifies the build number of the operating
          ;system in the low-order word For Win9X
   .if eax == VER_PLATFORM_WIN32s
            mov esi, OFFSET szWin31
            and OsVer.dwBuildNumber, 0FFFFh

          .elseif eax == VER_PLATFORM_WIN32_WINDOWS
            mov esi, OFFSET szWin9x
            and OsVer.dwBuildNumber, 0FFFFh
   .else ; eax ==VER_PLATFORM_WIN32_NT
            mov esi, OFFSET szWinNT
          .endif
   invoke lstrcpy, ADDR szOsVerInfo, esi
   invoke wsprintf, ADDR szOsVerInfoTmp,\
              ADDR szFormat4OsVer, OsVer.dwMajorVersion,\
              OsVer.dwMinorVersion, OsVer.dwBuildNumber
   invoke lstrcat, ADDR szOsVerInfo, ADDR szOsVerInfoTmp
          invoke lstrcat, ADDR szOsVerInfo, ADDR OsVer.szCSDVersion
          mov  edi, OFFSET szOsVerInfo
          mov  esi, MB_OK OR MB_ICONINFORMATION
       .else
          mov  edi, OFFSET szGetOsInfoFail
          mov  esi, MB_OK OR MB_ICONWARNING
       .endif
   invoke MessageBox, NULL, edi, addr szMsgBoxTitle, esi

     invoke ExitProcess,NULL
end start


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产欧美精品日韩| 国产亚洲在线观看| 欧美在线观看网址综合| 在线视频亚洲欧美| 日韩一级在线| 亚洲精品日日夜夜| 亚洲激情影视| 亚洲肉体裸体xxxx137| 亚洲国产精品一区二区第一页 | 亚洲高清视频一区| 一区免费观看| 在线欧美日韩| 亚洲高清久久网| 亚洲福利视频在线| 亚洲第一主播视频| 亚洲国产精品一区二区久| 亚洲黄色成人| 亚洲精选国产| 99精品国产在热久久婷婷| 亚洲另类视频| 日韩一级黄色片| 中文精品99久久国产香蕉| 国产精品99久久久久久白浆小说| 在线亚洲观看| 亚洲欧美精品suv| 欧美亚洲网站| 亚洲电影在线| 亚洲免费av观看| 亚洲视频在线观看免费| 亚洲欧美视频一区| 久久成人18免费网站| 久久一区激情| 欧美精品一区二区三区四区| 欧美日韩国产91| 国产精品亚洲а∨天堂免在线| 国产日韩欧美一区在线| 伊人成人网在线看| 亚洲精品小视频在线观看| 中文av字幕一区| 欧美在线二区| 亚洲精品久久视频| 亚洲一区久久| 久久久精品tv| 欧美精品一线| 国产精品视频午夜| 一区视频在线播放| 99re热这里只有精品免费视频| 亚洲天堂偷拍| 久久精品男女| 一本色道久久综合亚洲精品按摩| 先锋影音国产一区| 老司机精品视频网站| 欧美日本在线播放| 国产麻豆9l精品三级站| 在线精品一区| 亚洲视频在线一区观看| 久久精品视频在线观看| 在线综合欧美| 久久精品午夜| 欧美日韩国产综合一区二区| 国产美女高潮久久白浆| 亚洲国产成人久久综合| 亚洲午夜激情| 亚洲日本无吗高清不卡| 午夜精品免费| 欧美高清在线观看| 国产伦理一区| 日韩视频不卡中文| 久久黄色级2电影| 亚洲一区观看| 欧美国产一区二区在线观看| 国产欧美精品va在线观看| 亚洲片在线资源| 午夜精品在线观看| 一区二区三区产品免费精品久久75| 欧美在线一区二区三区| 欧美日本不卡高清| 国产亚洲一区在线| 亚洲视频久久| 亚洲免费播放| 久久天堂av综合合色| 国产精品入口尤物| 亚洲美女电影在线| 久久精品一区中文字幕| 午夜欧美大尺度福利影院在线看| 欧美福利专区| 国产午夜精品在线| 这里只有精品视频在线| 最新日韩av| 久久漫画官网| 国产伦精品一区二区三区免费迷 | 黄色日韩网站| 亚洲伊人久久综合| 一区二区三区日韩精品| 老司机午夜精品视频| 国产伦精品一区二区三区照片91| 99亚洲一区二区| 亚洲精品麻豆| 美女脱光内衣内裤视频久久影院| 国产日韩一区二区| 亚洲素人一区二区| 在线综合亚洲欧美在线视频| 欧美国产欧美综合 | 国产精品久久久久影院色老大| 亚洲精品在线观看免费| 亚洲精品日韩在线| 美女任你摸久久| 黄色亚洲在线| 久久国产乱子精品免费女 | 国产资源精品在线观看| 亚洲欧美日韩在线播放| 亚洲欧美国产精品va在线观看| 欧美日韩视频一区二区三区| 91久久夜色精品国产网站| 亚洲欧洲三级电影| 久久尤物视频| 狠狠噜噜久久| 亚洲电影免费观看高清完整版在线观看| 久久久99精品免费观看不卡| 国产精品一区二区三区四区 | 欧美日韩大陆在线| 亚洲人体一区| 99国内精品| 欧美区一区二| 日韩网站免费观看| 一区二区电影免费观看| 欧美日韩精品伦理作品在线免费观看| 亚洲三级网站| 99国内精品久久| 欧美天天在线| 亚洲视频图片小说| 午夜精品久久久99热福利| 国产精品毛片高清在线完整版| 在线一区二区三区四区五区| 亚洲在线成人精品| 国产精品一区二区三区观看| 亚洲欧美日韩网| 久久久女女女女999久久| 狠狠色狠狠色综合| 亚洲激情一区| 欧美日韩精品系列| 中文精品视频| 久久精品成人一区二区三区| 国内久久精品| 亚洲精品孕妇| 欧美色图一区二区三区| 亚洲午夜激情网页| 久久久777| 亚洲欧洲日本国产| 亚洲一区二区三区影院| 国产精品久久久久77777| 午夜精品久久久久久久99樱桃 | 欧美精品自拍偷拍动漫精品| 99国产一区| 欧美一区国产一区| 精品福利免费观看| 一区二区三区欧美激情| 国产欧美日韩亚洲精品| 亚洲国产日韩一区| 欧美三区美女| 性欧美办公室18xxxxhd| 欧美成人dvd在线视频| 一区二区三区精品| 久久久91精品国产| 亚洲人成在线播放网站岛国| 午夜精品福利视频| 精品白丝av| 亚洲一二三区精品| 国产一区二区三区的电影| 亚洲美女电影在线| 国产欧美一区二区精品秋霞影院| 亚洲国产欧美一区二区三区丁香婷| 欧美日韩视频| 久久激情综合| 国产精品igao视频网网址不卡日韩| 欧美一区成人| 欧美人与禽性xxxxx杂性| 性欧美videos另类喷潮| 欧美日本精品| 欧美资源在线| 欧美视频二区36p| 亚洲大胆女人| 国产精品久久久久久久久久妞妞 | 日韩午夜av| 国产伦精品一区二区三区视频孕妇| 亚洲清纯自拍| 国产精品午夜在线观看| 亚洲人永久免费| 国产欧美日韩免费看aⅴ视频| 日韩视频免费在线| 国产亚洲成av人在线观看导航| 夜夜爽夜夜爽精品视频| 国产一区高清视频| 一区二区三区久久久| 极品av少妇一区二区| 亚洲欧美日韩另类精品一区二区三区 | 欧美一区二区在线| 欧美小视频在线| 亚洲欧洲一区| 国内外成人免费激情在线视频网站 |