日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

VB中運(yùn)用匯編一例

VB中運(yùn)用匯編一例

更新時(shí)間:2021-09-25 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

下面的例子完全用VB進(jìn)行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

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

本類教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: 在线欧美视频免费观看国产 | 色琪影院 | 国产八区 | 国产综合视频 | 国产日韩在线播放 | 人久热欧美在线观看量量 | 日本s色大片在线观看 | 成人午夜在线播放 | 91碰在线 | 在线二区| 在线观看国产一级强片 | 亚洲精品123区 | 成年网站在线观看视频 | 国产琪琪裸色 | 操操操操操操操操 | 国产精品免费aⅴ片在线观看 | 在线视频一区二区 | 国产欧美一区二区成人影院 | 韩国v欧美v亚洲v日本v | 日本xxxx色视频在线观看 | 人久热欧美在线观看量量 | 爱爱草 | 日韩二区三区 | 最新国产在线观看 | 欧美日韩精品免费一区二区三区 | 日韩国产综合 | 国产亚洲成归v人片在线观看 | 国产黑丝视频在线观看 | 天天影视色香欲综合网网站麻豆 | 国产成人一区免费观看 | 免费观看一级欧美大 | 亚洲精品免费在线 | 成年人午夜 | 四虎精品成人免费观看 | 欧美日韩性视频一区二区三区 | 国产1区2区3区 | 视频日韩| 天天做夜夜做久久做狠狠 | 中文字幕一区二区三区乱码aⅴ | 国产成人+亚洲欧洲 | 69堂国产成人综合久久精品 |