簡體   English   中英

GDB將存在的字符與不存在的字符進行比較?

[英]GDB comparing an existent character with a non-existent character?

我目前正在嘗試磨練我在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)? 我是不是在看價值而不是價值(我被告知應該是一個字符,但還有其他東西)嗎? 我應該在其他地方尋找價值嗎? 我被困住了,我將不勝感激。

$rbp-1是地址; 您需要取消引用它。 (使用GDB的x命令在一個地址處檢查內存,或使用C語法取消引用print指針,例如p /c *(char*)($rbp-1)

您將地址的低字節打印為字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM