首页 > 解决方案 > 在调试时传递一个尖括号作为命令行参数输入

问题描述

我正在 NASM 中编写一个brainfuck 解释器,其中代码作为命令行参数提供给程序。我正在尝试测试循环,但 GDB 不喜欢我的输入。例如,这在单独运行时执行无错误:

$./interpret "+++++[->+<]"

它无限期地挂起,但我认为这是由于解释器(因此是 GDB)中的循环逻辑中的错误。

如果我加载interpret到 GDB 并尝试提供相同的参数,我会收到投诉:

gef➤  start "+++++[->+<]"
/bin/bash: line 1: ]: No such file or directory
/bin/bash: line 1: ]: No such file or directory

这似乎是由于<尽管有引号但被解释为重定向,因为[]在 GDB 中工作正常。

我尝试使用 转义 STDIN 重定向\<,但这会导致相同的错误,并且<<会导致警告:

gef➤  start "+++++[->+<<]"
/bin/bash: line 1: warning: here-document at line 1 delimited by end-of-file (wanted `]')

代码被切断:

$r15   : 0x00007fffffffe428  →  0x002d5b2b2b2b2b2b ("+++++[-"?)

有没有办法让 GDB 接受我从字面上给出的内容start,而不是尝试对参数进行任何重定向/解释?

标签: gdbcommand-line-argumentsio-redirection

解决方案


有没有办法让 GDB 以我的字面意思开始,而不是尝试对参数进行任何重定向/解释?

GDB 不做任何解释,bash是的。使用单引号而不是双引号可以解决这个问题。

(不过,我无法使用带有双引号的 GDB-10.0 和 bash-5.1.4 来复制问题。)


推荐阅读