Передача символов и непечатаемых значений в LLDB в качестве аргументов - PullRequest
0 голосов
/ 01 октября 2018

С lldb, как я могу передать длинную строку - которая включает шестнадцатеричные символы - в качестве аргумента командной строки?Некоторые из шестнадцатеричных символов могут быть недоступны для печати. ​​

(lldb) setting set target.run-args "AAAA\\x66\\x6f\\x6f"

(lldb) settings show target.run-args
target.run-args (array of strings) =
  [0]: "AAAA\x66\x6f\x6f"

// when I want it to read: "AAAAfoo"

В GDB я мог бы использовать echo -n -e 'AAAA\x66\x6f\x6f'.

1 Ответ

0 голосов
/ 05 октября 2018

Я нашел ответ.Если аргументы цели, отправленные в lldb:

string 1:  "AAAABBBBCCCCDDDDEEEEFFFF" appended with 0x00000e30
string 2:  "GGGGYYYYZZZZ"

Использование printf вместо echo, сработало следующее:

B=$(printf "AAAABBBBCCCCDDDDEEEEFFFF\x30\x0e\x00\x00")
lldb my_c_program $B "GGGGYYYYZZZZ"

Это интересный бит.

(lldb) settings show target.run-args
target.run-args (array of strings) =
  [0]: "AAAABBBBCCCCDDDDEEEEFFFF0"
  [1]: "GGGGYYYYZZZZ"

Поскольку у вас непечатные символы, легко подумать, что lldb не получил символы.Это не относится к делу.Если вы lldb) run, даже непечатаемые символы будут переданы правильно.

...