使用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'
。
答案 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
甚至正确地传递了不可打印的字符。