此处内容隐藏,登录后可见!立即登录 登录后请刷新页面!刷新
感谢分享!
支持!!!
感谢大佬分享
请教楼主,Type 1 中的 UUID 项和 Type 4 中的 Processor Characteristics 项如何获取?
这两个数据类型直接套进去得到的结果不对,不知道需要怎么处理。
anson4 请教楼主,Type 1 中的 UUID 项和 Type 4 中的 Processor Characteristics 项如何获取? 这两个数据类型直接套进去得到的结果不对,不知道需要怎么处理。 ...
ENVI^ ENVIMODE=1 ENVI$ &NL=0d 0a //转换RSMB为DWORD----开始 CODE *,RSMB,*-ANSI,&FirmwareTableProviderSignatureHex SED -ex &FirmwareTableProviderSignature=0, 0x,,&FirmwareTableProviderSignatureHex //转换RSMB为DWORD----结束 //第四个参数传入0,则返回获取RSMB结构长度 CALL $--qd --ret:&GetSystemFirmwareTableRet Kernel32.dll,GetSystemFirmwareTable,#%&FirmwareTableProviderSignature%,#0,#0,#0 //判断API是否成功 IFEX #%&GetSystemFirmwareTableRet%=0,EXIT //设置RSMB长度 ENVI &BufferSize=%&GetSystemFirmwareTableRet% //申请%&BufferSize%长度的&pFirmwareTableBuffer变量内存空间 SET$# pFirmwareTableBuffer=*%&BufferSize% 0 //获取&pFirmwareTableBuffer数据 CALL $--qd --ret:&GetSystemFirmwareTableRet Kernel32.DLL,GetSystemFirmwareTable,#%&FirmwareTableProviderSignature%,#0,*&pFirmwareTableBuffer,#%&BufferSize% //MESS. %&GetSystemFirmwareTableRet% //SET?数据类型 源PE变量名或地址=变量名:偏移字节数 //取PE对象中指定类型2进制数据。 SET?char pFirmwareTableBuffer=&&Used20CallingMethod:0 CALC &Used20CallingMethod=%&Used20CallingMethod% //16进制转10进制 SET?char pFirmwareTableBuffer=&&SMBIOSMajorVersion:1 CALC &SMBIOSMajorVersion=%&SMBIOSMajorVersion% SET?char pFirmwareTableBuffer=&&SMBIOSMinorVersion:2 CALC &SMBIOSMinorVersion=%&SMBIOSMinorVersion% SET?char pFirmwareTableBuffer=&&DmiRevision:3 CALC &DmiRevision=%&DmiRevision% SET?int pFirmwareTableBuffer=&&SMBIOSTableDataLength:4 ENVI &&SMBIOS_Version=%&SMBIOSMajorVersion%.%&SMBIOSMinorVersion% //SET-make PE变量名=[地址|&PE变量名[@[$]偏移]][;[*][[$]字节数]] //创建PE变量。*为char串 SET-make &SMBIOSTableData=&pFirmwareTableBuffer@(1 + 1 + 1 + 1 + 4);*%&SMBIOSTableDataLength% //获取实际的SMBIOSTableData数据 //把数据写入到一个文件中,方便用Winhex查看对比。 //IFEX %&CurDir%\SMBIOSTableData.Bin,FILE %&CurDir%\SMBIOSTableData.Bin //GETF -bin &pFirmwareTableBuffer,(1 + 1 + 1 + 1 + 4)#%&SMBIOSTableDataLength%,&SMBIOSTableDataTemp //PUTF %&CurDir%\SMBIOSTableData.Bin,0#,%&SMBIOSTableDataTemp% SET$# &type=*1 0 //申请1个字节的内存空间,定义一个变量,作为类型变量 SET$# &data_offset=*1 0 //申请1个字节的内存空间,定义一个变量,作为类型(格式区)长度 ENVI &&Type_Start=0 //定义一个变量,作为当前类型的起始位置值的标记 CODE *ANSI,0x00 0x00,**ANSI,&&TypeKeyWords CODE *ANSI,0x00,**ANSI,&&CharKeyWords LOOP #%&Type_Start%>=0, {* //SET-zero PE变量名=[[$]数值][@[$]偏移]][;[$]数量] //清除变量的内存,默认0 $:加宽,可多次 SET-zero type= SET-zero data_offset= SET?char SMBIOSTableData=&type:%&&Type_Start% ENVI &&Type_Start_Last=%&Type_Start% //上一个类型的结束位置 SET?char SMBIOSTableData=&data_offset:(%&Type_Start% + 1) CALC &data_offset=%&data_offset% CALC &pdata_offset=%&data_offset%-1 //格式区结束地址,0x00为首地址 GETF -find &SMBIOSTableData,(%&data_offset% + %&Type_Start%)###0#1#0,&&Type_End,*&&TypeKeyWords IFEX $%&Type_End%=-1,EXIT LOOP CALC &&Type_Start=%&Type_End% + 2 //尾部加上两个字节的0x00 0x00 IFEX [ #%&type%=1 & $%&SMBIOS_Version%>=2.0 ], {* CALC &BIOS_INFO_Len=%&Type_Start% - %&data_offset% - %&Type_Start_Last% //字符串区的长度 GETF -find &SMBIOSTableData,(%&Type_Start_Last% + %&data_offset% )#%&BIOS_INFO_Len%##0#1#0,*&&BIOS_INFO_CharKeyWords,*&&CharKeyWords CALL UUID } } _SUB UUID * SET-make &&UUID=&SMBIOSTableData@(%&Type_Start_Last% + 0x08);*16 SET?long@ &&UUID=&a1:0 SET?short@ &&UUID=&a2:4 SET?short@ &&UUID=&a3:( 4 + 2 ) SET?char@ &&UUID=&a4:( 4 + 2 + 2 ) SET?char@ &&UUID=&a5:( 4 + 2 + 2 + 1 ) GETF &&UUID,10#6,&&Node SED -ex &&Node=0,0x,,&&Node SED -ex &&Node=0, ,,&&Node MESS %&a1%-%&a2%-%&a3%-%&a4%%&a5%-%&&Node% _END
这两个都要对着表解析
Processor Characteristics要对着7.5.9这一节解析,你自己试试看吧,UUID应该没问题了
123 这两个都要对着表解析 Processor Characteristics要对着7.5.9这一节解析,你自己试试看吧,UUID应该没问题了
好的,谢谢!
文档其实看过好多遍了,只是没有编程基础,比较吃力。
Processor Characteristics 似乎与 Memory Type 有点类似,我再努力一把,不行的话再上来请教。
谢谢分享
感谢分享
顶
牛B!佩服!
狠人出手,(○´・д・)ノ
学习学习。
Thx for sharing
thank for share <3