给定一个CPU型号,如何生成对应的cpuid指令注意不是获取是生成 !

给定一个CPU型号,如何生成对应的cpuid指令注意不是获取是生成 !,第1张

CPUID指令是intel IA32架构下获得CPU信息的汇编指令,可以得到CPU类型,型号,制造商信息,商标信息,序列号,缓存等一系列CPU相关的东西。

比如生成查询CPU的制造商信息(Vender ID String)的代码:

string CPUID::GetVID()

{

char cVID[13]; // 字符串,用来存储制造商信息

memset(cVID, 0, 13); // 把数组清0

Executecpuid(0); // 执行cpuid指令,使用输入参数 eax = 0

memcpy(cVID, &m_ebx, 4); // 复制前四个字符到数组

memcpy(cVID+4, &m_edx, 4); // 复制中间四个字符到数组

memcpy(cVID+8, &m_ecx, 4); // 复制最后四个字符到数组

return string(cVID); // 以string的形式返回

}

示例代码如下:

procedure TForm1Button1Click(Sender: TObject);

  type

    TCPUID = array[14] of longint;

  function GetCPUID: TCPUID;

  asm

    PUSH    EBX

   PUSH    EDI

   MOV     EDI,EAX    

   MOV     EAX,1

   DW      $A20F      

   STOSD

   MOV     EAX,EBX

   STOSD

   MOV     EAX,ECX

   STOSD

   MOV     EAX,EDX

   STOSD

   POP     EDI

   POP     EBX

  end;

var

  aCpuId: TCpuID;

begin

  aCpuId := GetCPUID;

  ShowMessage('CPU 序列号是: ' + IntToHex(aCpuId[4],8) + IntToHex(aCpuId[1],8));

end;

代码运行截图:

与实际的对比:

///==============================获取CPU序列号========

package comtest;

import javaioIOException;

import javautilScanner;

public class CpuUtil {

public static void main(String[] args) throws IOException {

long start = SystemcurrentTimeMillis();

Process process = RuntimegetRuntime()exec(

new String[] { "wmic", "cpu", "get", "ProcessorId" });

processgetOutputStream()close();

Scanner sc = new Scanner(processgetInputStream());

String property = scnext();

String serial = scnext();

Systemoutprintln(property + ": " + serial);

Systemoutprintln("time:" + (SystemcurrentTimeMillis() - start));

}

}

//=======================获取硬盘序列号==========================

package comtest;

import javaioBufferedReader;

import javaioFile;

import javaioFileWriter;

import javaioInputStreamReader;

public class DiskUtil {

public static String getSerialNumber(String drive) {

String result = "";

try {

File file = FilecreateTempFile("realhowto","vbs");

filedeleteOnExit();

FileWriter fw = new javaioFileWriter(file);

String vbs = "Set objFSO = CreateObject(\"ScriptingFileSystemObject\")\n"

+"Set colDrives = objFSODrives\n"

+"Set objDrive = colDrivesitem(\"" + drive + "\")\n"

+"WscriptEcho objDriveSerialNumber"; // see note

fwwrite(vbs);

fwclose();

Process p = RuntimegetRuntime()exec("cscript //NoLogo " + filegetPath());

BufferedReader input =

new BufferedReader

(new InputStreamReader(pgetInputStream()));

String line;

while ((line = inputreadLine()) != null) {

result += line;

}

inputclose();

}

catch(Exception e){

eprintStackTrace();

}

return resulttrim();

}

public static void main(String[] args) {

String sn = DiskUtilgetSerialNumber("C");

Systemoutprintln(sn);

}

//=============================获取主板序列号====================

package comtest;

import javaioBufferedReader;

import javaioFile;

import javaioFileWriter;

import javaioInputStreamReader;

public class MiscUtil {

public static String getMotherboardSN() {

String result = "";

try {

File file = FilecreateTempFile("realhowto", "vbs");

filedeleteOnExit();

FileWriter fw = new javaioFileWriter(file);

String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\\\root\\cimv2\")\n"

+ "Set colItems = objWMIServiceExecQuery _ \n"

+ " (\"Select from Win32_BaseBoard\") \n"

+ "For Each objItem in colItems \n"

+ " WscriptEcho objItemSerialNumber \n"

+ " exit for ' do the first cpu only! \n" + "Next \n";

fwwrite(vbs);

fwclose();

Process p = RuntimegetRuntime()exec(

"cscript //NoLogo " + filegetPath());

BufferedReader input = new BufferedReader(new InputStreamReader(p

getInputStream()));

String line;

while ((line = inputreadLine()) != null) {

result += line;

}

inputclose();

} catch (Exception e) {

eprintStackTrace();

}

return resulttrim();

}

public static void main(String[] args) {

String cpuId = MiscUtilgetMotherboardSN();

Systemoutprintln(cpuId);

}

}

以上就是关于给定一个CPU型号,如何生成对应的cpuid指令注意不是获取是生成 !全部的内容,包括:给定一个CPU型号,如何生成对应的cpuid指令注意不是获取是生成 !、如何用 DELPHI 获取 CPU 的序列号、java 能不能获取CPU的ID号,硬盘的序列号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9453861.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存