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


Reply With Quote

