将字符和不可打印的值作为参数传递给LLDB

时间:2018-10-01 16:46:13

标签: debugging gdb lldb

使用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 :(得分:0)

我找到了答案。如果发送到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甚至正确地传递了不可打印的字符。