• <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

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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 一级做α爱过程免费视频| 亚洲中文字幕无码mv| 无码日韩人妻AV一区免费l| 国产视频精品免费| 国产精品亚洲五月天高清| 永久免费av无码网站大全| 亚洲精品无码中文久久字幕| 永久免费毛片手机版在线看| 国产精品亚洲一区二区在线观看 | 亚洲夜夜欢A∨一区二区三区| 男人免费视频一区二区在线观看| 免费a级毛片无码av| 免费一级毛片在线播放视频免费观看永久| 国产三级电影免费观看| 国产在亚洲线视频观看| 国产亚洲精品a在线观看| 国产成人AV免费观看| 亚洲视频在线不卡| 好吊妞788免费视频播放| 杨幂最新免费特级毛片| 亚洲精品国偷自产在线| 无码精品国产一区二区三区免费 | 免费永久看黄在线观看app| 五月天婷婷精品免费视频| 亚洲成A人片777777| 国产福利视精品永久免费| 亚洲粉嫩美白在线| 国产精品亚洲二区在线观看| 日本免费中文字幕| 亚洲sss综合天堂久久久| 亚洲成网777777国产精品| 亚洲免费在线视频| 亚洲高清乱码午夜电影网| 亚洲 无码 在线 专区| 久久午夜免费鲁丝片| 亚洲中文字幕无码mv| 亚洲AV午夜成人片| 精品久久久久久久免费加勒比| a级毛片免费高清毛片视频| 亚洲AV无码一区二区三区人| 中文字幕亚洲专区|