В качестве примечания, глядя на сценарий Эндрю Брэмптона, упомянутый в ответе @don _crissti , вы можете получить тот же результат от Radare2 , который является обратным -инженерная база.
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
Если вы присвоите значение var1
переменной var2
, вы получите две независимые переменные var1
и var2
, которые имеют одинаковые значения.
Вы можете использовать переменную var2
, объявленную с атрибутом nameref
, для ссылки на var1
.
$ var1=1
$ declare -n var2=var1
$ echo "$var2"
1
$ var1=2
$ echo "$var2"
2
$ var2=3
$ echo "$var2 $var1"
3 3
Это распространенное -представление о том, как работают многие / большинство языков программирования.
В императивных языках(bash
/ C
/ Java
/ python
.... )оператор =
работает не так же, как в математике.
a=1
означает поместить 1 вa
(перезаписав то, что там было ).
И.Е.
var1=1 # var1 ← 1 #overwrite var1 with 1
var2=$var1 # var2 ← $var1 #overwrite var2 with evaluation of $var1 (i.e 1)
var1=2 # var1 ← 2 #overwrite var1 with 2
stdout ←← $var2 #append $var2 to stdout
Поэтому
# var1 var2
var1=1 # 1 n/a
var2=$var1 # 1 1
var1=2 # 2 1