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

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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 中文字幕无码视频手机免费看| 日本免费的一级v一片| 可以免费看黄的网站| 亚洲五月六月丁香激情| 无码人妻丰满熟妇区免费| 亚洲人成亚洲精品| 在线a免费观看最新网站| 亚洲妇女水蜜桃av网网站| 麻豆va在线精品免费播放| av无码东京热亚洲男人的天堂| 亚洲AV无码乱码国产麻豆| 久久免费美女视频| 亚洲a一级免费视频| 免费观看激色视频网站bd| 亚洲av无码一区二区三区观看| a级毛片高清免费视频就| 韩国欧洲一级毛片免费| 国产亚洲综合视频| 亚洲AV无码乱码在线观看性色扶 | 免费很黄很色裸乳在线观看| 真人无码作爱免费视频| 亚洲综合另类小说色区色噜噜| 成人网站免费看黄A站视频| 国产美女无遮挡免费视频| 亚洲国产精品白丝在线观看| 国产精品成人免费一区二区| 特级aaaaaaaaa毛片免费视频| 在线观看亚洲精品福利片| 曰批视频免费40分钟试看天天| 亚洲中文无码亚洲人成影院| 亚洲另类少妇17p| 色欲A∨无码蜜臀AV免费播 | 亚洲色欲色欱wwW在线| 亚洲午夜福利精品久久| 8x8×在线永久免费视频| 亚洲国产无线乱码在线观看 | 亚洲精品乱码久久久久蜜桃| 中文字幕第13亚洲另类| 丁香花免费高清视频完整版| 视频免费1区二区三区| 亚洲成a人片在线观|