我有一个由 驱动的 Intel 无线卡iwlwifi
,我可以在 dmesg 中看到以下消息:
iwlwifi 0000:03:00.0: loaded firmware version 17.168.5.3 build 42301
鉴于我知道加载了哪个 blob,我如何才能找到该 blob(.ucode
文件)的版本?
如果您查看下面加载 ucode 的位置,它不会告诉我版本信息,只是加载了一个 blob。但我知道英特尔有这些版本。
$ sudo dmesg | grep ucode
[ 26.132487] iwlwifi 0000:03:00.0: firmware: direct-loading firmware iwlwifi-6000g2a-6.ucode
[40428.475015] (NULL device *): firmware: direct-loading firmware iwlwifi-6000g2a-6.ucode
答案1
驱动程序iwlwifi
会加载您的微代码文件无线上网启动时的适配器。如果您想知道计算机上的 blob 版本,请尝试安德鲁·布兰普顿的剧本。 跑步:
## Note the firmware may stored in `/usr/lib`
./ucode.py /lib/firmware/iwlwifi-*.ucode
并将输出与您的日记(dmesg
输出)进行比较。
请注意,该脚本适用于python2
.
答案2
作为旁注,看看安德鲁布兰普顿脚本中提到的@don_crissti 的回答,你可以得到相同的输出雷达2这是一个逆向工程框架。
pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
pf
打印格式化数据x
0xHEX value and flag (fd @ addr) (see 'd' and 'i')
[4]z
null terminated string
最小长度 4 尺寸[64]z
null terminated string
最小长度 64 尺寸N1N1N1N1
next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))
您可以从这样的脚本运行它,
for f in /lib/firmware/iwlwifi-*.ucode; do
echo $f;
radare2 -qc "pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major" "$f";
done;
这是一些示例输出
magicfile : 0x00000000 = 0x00000000
magicblob : 0x00000004 = IWL.
text : 0x00000008 = 6000g2b fw v18.168.6.1 build 0.
serial : 0x00000048 = 1
api : 0x00000049 = 6
minor : 0x0000004a = 168
major : 0x0000004b = 18
你倒着玩它们,major.minor.api.serial
得到18.168.6.1