我在这里阅读了许多关于这个主题的问题/答案,但是没有一个解决方案可行...我想将由perl生成的字符串传递给正在被gdb调试的可执行文件。 但是我甚至无法传递转义的十六进制字符... 我尝试了以下“解决方案”:
1:
$ gdb ./a.out
(gdb) r "\x41"
2:
perl -e 'print "\x41"' > input.cmd
$ gdb ./a.out
(gdb) r < input.cmd
3:
$ gdb --args ./a.out "\x41"
(gdb) r
4:
$ gdb ./a.out
(gdb) set args "\x41"
(gdb) r
我尝试了许多不同的转义字符组合,包括", /, \, ', `等等,但都没有成功。解决方案2在SO的许多帖子中都有讨论,但我得到的参数是"<"(gdb将所有内容都转义为字符串)
我甚至尝试调试bash并将可执行文件设置为较小,但bash仍然崩溃...
我错过了什么?我使用的是macOS 10.13上的gdb 8.0.1
更新:
刚刚在linux机器上尝试了一下,上述解决方案可行。我猜问题出在macOS的bash/gdb交互上...有什么想法吗?
更新2:
已解决
在macOS上,显然是gdb中bash调用的问题,设法通过以下方式解决:
$ gdb --args ./a.out $(perl -e 'print "\x41"')
(gdb) r < input.cmd
时,gdb将"<"和"input.cmd"作为两个参数传递:Thread 2 hit Breakpoint 1, function (variable=0x7ffeefbffbf9 "<") at prog_example.c:16 16 return return_variable; (gdb) show args Argument list to give program being debugged when it is started is "< bin/input.cmd".
- xfze