GDB将现有字符与不存在字符进行比较?

时间:2018-11-09 01:31:25

标签: debugging assembly gdb

我目前正在尝试磨练我在GDB中阅读汇编的技能,并且在尝试阅读GDB中的角色时遇到了一些怪异,而且我不确定会发生什么。

对于某些情况,我正在查看的文件已编译,尽管代码是在c中编译的,但没有.c函数。它本质上是一个“炸弹”分配文件,需要特定的输入才能进入代码的下一部分,而该代码来自根据答案的要求测试其中一个输入。

包含我要读取的字符的代码如下:

cmp -0x1(%rbp),%al
je 0x400acf <nextpartofcode>

我正在尝试读取-0x1(%rbp),因此我输入了print/c $rbp-1来尝试查看它并打印出GDB:175 '\257'。假定此输出表示如果将ASCII字符175放入,则比较将成功,但是,当我输入该字符(看起来像>>)时,它显示为-62 '\302'

我还尝试将值读取为整数,八进制值,十进制值,字符串和十六进制值,并且获得了相同的成功率,但我不知所措。这里到底发生了什么?我是否在错误的位置(即-0x1(%rbp)而不是$ rb​​p-1)?我是不是在看价值而不是价值(我被告知应该是一个字符,但还有其他东西)吗?我应该在其他地方寻找价值吗?我被困住了,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

$rbp-1是地址;您需要取消引用它。 (使用GDB的x命令检查地址处的内存,或使用C语法取消引用print的指针,例如p /c *(char*)($rbp-1)

您正在将地址的低字节打印为字符。