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

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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 免费毛片毛片网址| 亚洲av伊人久久综合密臀性色| 四虎1515hh永久久免费| 最近中文字幕电影大全免费版| 久久午夜免费视频| 亚洲?v无码国产在丝袜线观看| 亚洲日本一区二区一本一道| 久久久无码精品亚洲日韩京东传媒| 91亚洲自偷在线观看国产馆| 美女又黄又免费的视频| 日本免费一区二区三区四区五六区 | 亚洲一级片内射网站在线观看| 美女被艹免费视频| 亚洲中文字幕丝袜制服一区| 久久一区二区三区免费| 成人免费看片又大又黄| 国产亚洲色婷婷久久99精品| 亚洲一区二区影视| 美女网站在线观看视频免费的| 在线亚洲人成电影网站色www| 亚洲AV无码成人网站在线观看| 久久精品一本到99热免费| 亚洲系列中文字幕| 国产在线观看免费av站| 爽爽日本在线视频免费| 亚洲av无码片在线播放| 91高清免费国产自产拍2021| 亚洲中文字幕无码av在线| 日韩免费视频一区| 亚洲国产av美女网站| 妞干网免费视频在线观看| 亚洲精品电影天堂网| 女性无套免费网站在线看| 黄床大片30分钟免费看| 久久精品国产精品亚洲艾草网| 无码区日韩特区永久免费系列| 精品亚洲国产成人av| 人成午夜免费视频在线观看| 亚洲AV日韩综合一区| 亚洲VA成无码人在线观看天堂| 美女网站免费福利视频|