• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        VB中運用匯編一例

        VB中運用匯編一例

        更新時間:2021-09-25 文章作者:未知 信息來源:網絡 閱讀次數:

        下面的例子完全用VB進行ASM編程的示例,本例獲得CPU ID.


        工程文件分為一個form1.frm 和一個模塊module1.bas

        ----------------------form1.frm的源文件---------------------

        VERSION 5.00
        Begin VB.Form Form1
           Caption         =   "Form1"
           ClientHeight    =   1965
           ClientLeft      =   60
           ClientTop       =   345
           ClientWidth     =   3105
           LinkTopic       =   "Form1"
           ScaleHeight     =   1965
           ScaleWidth      =   3105
           StartUpPosition =   2  'Bildschirmmitte
           Begin VB.CommandButton Command1
              Caption         =   "Get CPU Name"
              Height          =   495
              Left            =   840
              TabIndex        =   0
              Top             =   315
              Width           =   1425
           End
           Begin VB.Label Label2
              Alignment       =   2  'Zentriert
              AutoSize        =   -1  'True
              BeginProperty Font
                 Name            =   "MS Sans Serif"
                 Size            =   9.75
                 Charset         =   0
                 Weight          =   400
                 Underline       =   0   'False
                 Italic          =   0   'False
                 Strikethrough   =   0   'False
              EndProperty
              Height          =   240
              Left            =   1515
              TabIndex        =   2
              Top             =   1065
              Width           =   60
           End
           Begin VB.Label Label1
              Alignment       =   2  'Zentriert
              AutoSize        =   -1  'True
              BeginProperty Font
                 Name            =   "Arial"
                 Size            =   12
                 Charset         =   0
                 Weight          =   700
                 Underline       =   0   'False
                 Italic          =   0   'False
                 Strikethrough   =   0   'False
              EndProperty
              Height          =   285
              Left            =   1515
              TabIndex        =   1
              Top             =   1350
              Width           =   75
           End
        End
        Attribute VB_Name = "Form1"
        Attribute VB_GlobalNameSpace = False
        Attribute VB_Creatable = False
        Attribute VB_PredeclaredId = True
        Attribute VB_Exposed = False
        Option Explicit

        Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)

            Label1 = ""
            Label2 = ""

        End Sub

        Private Sub Command1_Click()
            
            Label1 = GetCpuName() & " CPU"
            Label2 = "You have a" & IIf(InStr("AEIOU", Left$(Label1, 1)), "n", "")

        End Sub
        ------------------------------end---------------------------------





        下面是modu1e.bas的源代碼

        ----------------------module1.bas的源文件--------------------------
        Option Explicit
        '
        'This shows how to incorporate machine code into VB
        '''''''''''''''''''''''''''''''''''''''''''''''''''
        'The example fills the array with a few machine instructions and then copies
        'them to a procedure address. The modified procedure is then called thru
        'CallWindowProc. The result of this specific machine code is your CPU Vendor Name.
        '
        '##########################################################################
        'Apparently it gets a Stack Pointer Error, but I don't know why; if anybody
        'can fix that please let me know...                          UMGEDV@AOL.COM
        'The Error is not present in the native compiled version; so I think it got
        'something to do with the P-Code Calling Convention (strange though)...
        '##########################################################################
        '
        'Sub Dummy serves to reserve some space to copy the machine instructions into.
        '
        '
        'Tested on Intel and AMD CPU's (uncompiled and compiled)
        '
        '
        Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
        Private x As Long

        Public Function GetCpuName() As String
          
          Dim MachineCode(0 To 35)  As Byte
          Dim VarAddr               As Long
          Dim FunctAddr             As Long
          Dim EAX                   As Long
          Dim CPUName(1 To 12)      As Byte
          
          'set up machine code
            
            MachineCode(0) = &H55    'push ebp
            
            MachineCode(1) = &H8B    'move ebp,esp
            MachineCode(2) = &HEC
            
            MachineCode(3) = &H57    'push edi
            
            MachineCode(4) = &H52    'push edx
            
            MachineCode(5) = &H51    'push ecx
            
            MachineCode(6) = &H53    'push ebx
            
            MachineCode(7) = &H8B    'move eax,dword ptr [ebp+8]
            MachineCode(8) = &H45
            MachineCode(9) = &H8
            
            MachineCode(10) = &HF    'cpuid
            MachineCode(11) = &HA2
            
            MachineCode(12) = &H8B   'mov edi,dword ptr [ebp+12]
            MachineCode(13) = &H7D
            MachineCode(14) = &HC
            
            MachineCode(15) = &H89   'move dword ptr [edi],ebx
            MachineCode(16) = &H1F
            
            MachineCode(17) = &H8B   'mov edi,dword ptr [ebp+16]
            MachineCode(18) = &H7D
            MachineCode(19) = &H10
            
            MachineCode(20) = &H89   'move dword ptr [edi],ecx
            MachineCode(21) = &HF
            
            MachineCode(22) = &H8B   'mov edi,dword ptr [ebp+20]
            MachineCode(23) = &H7D
            MachineCode(24) = &H14
            
            MachineCode(25) = &H89   'move dword ptr [edi],edx
            MachineCode(26) = &H17
            
            MachineCode(27) = &H58   'pop ebx

            MachineCode(28) = &H59   'pop ecx

            MachineCode(29) = &H5A   'pop edx

            MachineCode(30) = &H55   'pop edi
            
            MachineCode(31) = &HC9   'leave

            MachineCode(32) = &HC2   'ret 16     I tried everything from 0 to 24
            MachineCode(33) = &H10   '           but all produce the stack error
            MachineCode(34) = &H0
            
            'tell cpuid what we want
            EAX = 0
            
            'get address of Machine Code
            VarAddr = VarPtr(MachineCode(0))
            
            'get address of Sub Dummy
            FunctAddr = GetAddress(AddressOf Dummy)
            
            'copy the Machine Code to where it can be called
            CopyMemory ByVal FunctAddr, ByVal VarAddr, 35 '35 bytes machine code
            
            'call it
            On Error Resume Next 'apparently it gets a stack pointer error when in P-Code but i dont know why
              CallWindowProc FunctAddr, EAX, VarPtr(CPUName(1)), VarPtr(CPUName(9)), VarPtr(CPUName(5))
              'Debug.Print Err; Err.Description
              'MsgBox Err & Err.Description
            On Error GoTo 0
            
            GetCpuName = StrConv(CPUName(), vbUnicode) 'UnicodeName
            
        End Function

        Private Function GetAddress(Address As Long) As Long

            GetAddress = Address

        End Function

        Private Sub Dummy()

          'the code below just reserves some space to copy the machine code into
          'it is never executed

            x = 0
            x = 1
            x = 2
            x = 3
            x = 4
            x = 5
            x = 6
            x = 7
            x = 8
            x = 9
            x = 10
            x = 0
            x = 1
            x = 2
            x = 3
            x = 4
            x = 5
            x = 6
            x = 7
            x = 8
            x = 9
            x = 10
           
        End Sub

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 国产精一品亚洲二区在线播放 | 亚洲国产天堂久久综合网站| 苍井空亚洲精品AA片在线播放| 夫妻免费无码V看片| 亚洲jjzzjjzz在线播放| 69天堂人成无码麻豆免费视频| 亚洲国产精品成人综合色在线婷婷| 香蕉免费一区二区三区| 91亚洲精品视频| 中文字幕乱码免费视频| 香蕉大伊亚洲人在线观看| 男女交性永久免费视频播放| 亚洲6080yy久久无码产自国产| 免费无遮挡无码永久在线观看视频| 午夜亚洲WWW湿好爽| 亚洲精品456播放| 色www永久免费网站| 337p欧洲亚洲大胆艺术| 国产人在线成免费视频| 苍井空亚洲精品AA片在线播放 | 色婷婷7777免费视频在线观看| 亚洲日韩亚洲另类激情文学| 破了亲妺妺的处免费视频国产| 特级aaaaaaaaa毛片免费视频| 亚洲午夜爱爱香蕉片| 免费黄网站在线观看| 亚洲伊人久久大香线蕉在观| 免费无码又爽又刺激高潮| xxxx日本在线播放免费不卡| 亚洲AV无码乱码国产麻豆穿越| 国内精自视频品线六区免费| 精品国产亚洲第一区二区三区| 亚洲综合AV在线在线播放| 精品国产sm捆绑最大网免费站| 亚洲Av永久无码精品黑人| 亚洲综合网站色欲色欲| 4虎永免费最新永久免费地址| 日日摸夜夜添夜夜免费视频| 亚洲一区二区三区首页| 国产精品久久免费视频| 久久青草免费91线频观看站街|