Results 1 to 12 of 12

Thread: Hava a look--Get the CPU name by ASM code!

Threaded View

  1. #1

    Thread Starter
    New Member
    Join Date
    Jul 2005
    Posts
    4

    Hava a look--Get the CPU name by ASM code!

    Code:
    Option Explicit
    
    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
    
    Function GetCpuName() As String
    
       Dim MachineCode(0 To 34) As Byte
       Dim VarAddr As Long
       Dim FunctAddr As Long
       Dim EAX As Long
       Dim CPUName(1 To 12) As Byte
       
       '设置机器代码
       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
       MachineCode(32) = &HC2
       MachineCode(33) = &H10
       MachineCode(34) = &H0
       EAX = 0
       VarAddr = VarPtr(MachineCode(0))          '得到机器代码的地址
       FunctAddr = GetAddress(AddressOf Dummy)   '得到子程序 Dummy的地址
                                                 '把机器代码拷贝到能够被调用的地方
       CopyMemory ByVal FunctAddr, ByVal VarAddr, 35  '机器代码的长度为35比特
                                                  
       Call CallWindowProc(FunctAddr, EAX, VarPtr(CPUName(1)), VarPtr(CPUName(9)), VarPtr(CPUName(5)))
       GetCpuName = StrConv(CPUName(), vbUnicode) 'UnicodeName
    End Function
    
    Private Function GetAddress(Address As Long) As Long
       GetAddress = Address
    End Function
    
    Private Sub Dummy()
       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
    Last edited by Pino; Jul 22nd, 2005 at 04:45 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width