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

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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 在线jlzzjlzz免费播放| 最近新韩国日本免费观看| 国产禁女女网站免费看| 亚洲香蕉在线观看| 91精品视频免费| 久久国产精品成人免费| 亚洲色欲久久久综合网东京热| 久久一区二区免费播放| 久久精品九九亚洲精品天堂| 亚洲午夜精品久久久久久app| 一二三四免费观看在线视频中文版| 亚洲国产成+人+综合| 免费在线看v网址| 亚洲av永久无码天堂网| 久久国产高潮流白浆免费观看| 亚洲AV无码一区二区乱子伦 | 久久w5ww成w人免费| 亚洲一区二区三区免费视频| 性色av免费观看| 无人视频免费观看免费视频 | a一级爱做片免费| 日韩一级在线播放免费观看| 青娱乐在线免费观看视频| 精品亚洲视频在线观看 | 1024免费福利永久观看网站| 国产精品亚洲片夜色在线| 免费人成在线观看网站品爱网日本| 在线播放国产不卡免费视频| 亚洲国产精品一区| 97在线观免费视频观看| 麻豆91免费视频| 亚洲国语精品自产拍在线观看| 免费成人福利视频| 羞羞视频免费网站入口| 亚洲AV无码日韩AV无码导航| 成年女人毛片免费播放人| 国产免费一区二区三区免费视频| 日韩精品一区二区亚洲AV观看| 成人免费无码大片a毛片软件 | AV无码免费永久在线观看| 美女免费精品高清毛片在线视|