В LLDB версии 8 я пытаюсь сбросить байты кода для функции "fh", используя команду memory read
, используя переменные для вычисления длины:
(lldb) expr unsigned $addr = (unsigned) fh
(lldb) expr unsigned $next_addr = (unsigned) fi
(lldb) expr unsigned $len = $next_addr - $addr
(lldb) p/x $addr
(unsigned int) $addr = 0x00000286
(lldb) p/x $next_addr
(unsigned int) $next_addr = 0x000002e4
(lldb) p/x $len
(unsigned int) $len = 0x0000005e
Передача $addr
так как адрес правильно интерпретируется с целым литералом как длина:
(lldb) memory read --size 1 --format x --count 0x5e $addr
0x00000286: 0xc8 0x47 0202 0x48 0xc9 0x42 ...
, но передача $len
в качестве аргумента для опции count не удается:
(lldb) memory read --size 1 --format x --count $len $addr
error: invalid uint64_t string value: '$len'
Это также происходит ссинтаксис точки останова, так что это может быть общим ограничением при разборе параметров:
(lldb) breakpoint set -l $len
error: invalid line number: $len.
Я также пытался передать его через псевдоним команды в надежде, что подстановка значения переменной произойдет раньше, но имела аналогичныеРезультаты:
(lldb) command alias foop memory read --size 1 --format x --count %1 %2
(lldb) foop $len $addr
error: invalid uint64_t string value: '$len'
Есть ли какой-то другой синтаксис для вычисления команды с переменными? Я бы предпочел не полагаться на поддержку Python, поскольку используемая мной цепочка инструментов не обеспечивает ее надежно.