Como observação, e olhando para o script de Andrew Brampton mencionado na @ resposta do don_crissti , você pode obter a mesma saída de Radare2 que é uma estrutura de engenharia reversa.
pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
-
pf
imprime dados formatados
-
x
0xHEX value and flag (fd @ addr) (see 'd' and 'i')
-
[4]z
null terminated string
de min-length 4 size
-
[64]z
null terminated string
de min-length 64 size
-
N1N1N1N1
next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))
Você pode executar isso de um script como este,
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;
Aqui está um exemplo de saída
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
Você os reproduz de trás para a frente, major.minor.api.serial
para obter 18.168.6.1