zoukankan
html css js c++ java
Delphi7中插入汇编[Assembly]獲取CPUID
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TCPUID
=
array
[
1
..
4
]
of
Longint;
TVendor
=
array
[
0
..
11
]
of
char;
type
TForm1
=
class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
procedure
Button1Click(Sender: TObject);
private
{
Private declarations
}
public
{
Public declarations
}
end
;
const
ID_BIT
=
$
200000
;
//
CPU ID 專用變量 EFLAGS ID bit
var
Form1: TForm1;
FUNCTION IsCPUID_Available : BOOLEAN; register;
FUNCTION GetCPUID : TCPUID; assembler; register;
FUNCTION GetCPUVendor : TVendor; assembler; register;
implementation
{
$R *.dfm
}
//
CPU ID
==================================================
FUNCTION IsCPUID_Available : BOOLEAN; register;
asm
PUSHFD
{
direct access to flags no possible, only via stack
}
POP EAX
{
flags to EAX
}
MOV EDX,EAX
{
save current flags
}
XOR EAX,ID_BIT
{
not ID bit
}
PUSH EAX
{
onto stack
}
POPFD
{
from stack to flags, WITH not ID bit
}
PUSHFD
{
back to stack
}
POP EAX
{
get back to EAX
}
XOR EAX,EDX
{
check IF ID bit affected
}
JZ @exit
{
no, CPUID not availavle
}
MOV AL,TRUE
{
Result=TRUE
}
@exit:
END;
FUNCTION GetCPUID : TCPUID; assembler; register;
asm
PUSH EBX
{
Save affected register
}
PUSH EDI
MOV EDI,EAX
{
@Resukt
}
MOV EAX,
1
DW $A20F
{
CPUID Command
}
STOSD
{
CPUID[1]
}
MOV EAX,EBX
STOSD
{
CPUID[2]
}
MOV EAX,ECX
STOSD
{
CPUID[3]
}
MOV EAX,EDX
STOSD
{
CPUID[4]
}
POP EDI
{
Restore registers
}
POP EBX
END;
FUNCTION GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX
{
Save affected register
}
PUSH EDI
MOV EDI,EAX
{
@Result (TVendor)
}
MOV EAX,
0
DW $A20F
{
CPUID Command
}
MOV EAX,EBX
XCHG EBX,ECX
{
save ECX result
}
MOV ECX,
4
@
1
:
STOSB
SHR EAX,
8
LOOP @
1
MOV EAX,EDX
MOV ECX,
4
@
2
:
STOSB
SHR EAX,
8
LOOP @
2
MOV EAX,EBX
MOV ECX,
4
@
3
:
STOSB
SHR EAX,
8
LOOP @
3
POP EDI
{
Restore registers
}
POP EBX
END;
//==============================================================================
procedure
TForm1.Button1Click(Sender: TObject);
var
cpuid:TCPUID; i:integer;
begin
if
IsCPUID_Available
then
begin
edit1.text:
=
''
;
cpuid:
=
GetCPUID;
//
CPUIDStr:
=
GetCPUVendor
+
'
_
'
;
for
i:
=
1
to
4
do
edit1.text:
=
edit1.text
+
IntToHex(CPUID[i],
4
);
end
else
edit1.text:
=
'
CPUID_IS_NOT_AVAILABLE
'
;
end
;
end
.
申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。
查看全文
相关阅读:
ArchLinux and LXDE and LXDM
如何改变X:\Users\XXX的用户名称
Windows 7 支持4GB以上内存破解工具下载
Linux & Vim Command Wallpaper
The easy way to execute sudo command in Python using subprocess.Popen
C# DateTime 精确到秒/截断毫秒部分
制约程序员"钱途"的两大最关键因素
Oracle基本操作
字符串处理【Delphi版】
java学习路线的经验之谈
原文地址:https://www.cnblogs.com/Athrun/p/1239606.html
最新文章
ASP分页
AspCms2标签大全
ASP字符替换
ASP格式化时间日期(一)
把数据库中的信息显示在下拉列表中
GridView排序、分页
linux下firefox2.0 安装flashpalyer
Linux磁盘分区UUID的获取及其UUID的作用
更改XP默认字体为微软雅黑
DenyHosts安装及配置
热门文章
How To Upgrade From Fedora 9 To Fedora 10 (Desktop & Server)
[转]MySQL性能优化方法
C#基础Func,Action
C# Winform DataGridView 公共分页实现
C#抓取ajax异步数据
jquery键盘事件
Replace multiple spaces with one space in Python(替换多个空格为一个空格)
如何将Linux命令的结果作为下一个命令的参数
安装VirtualBox出现Installation failed! Error: 系统找不到指定的路径
How to install VirtualBox Guest Additions in CentOS 6(在CentOS中安装VirtualBox增强功能)
Copyright © 2011-2022 走看看