(gdb) p (char*)0x7fffffffe9c8
$16 = 0x7fffffffe9c8 "\363\353\377\377\377\177"
它看起來不像ascii也不是多字節,那是什麼?什麼是 363 353 377 377 377 177?
(gdb) p (char*)0x7fffffffe9c8
$16 = 0x7fffffffe9c8 "\363\353\377\377\377\177"
它看起來不像ascii也不是多字節,那是什麼?什麼是 363 353 377 377 377 177?
這些是octal字符逃脫。它們通常用於將字節插入一個字符串中,該字符串不具有文本意義或需要具有某個二進制值。例如,\377
是十六進制值ff
或十進制255
,這將是ASCII碼爲ÿ
,但在此情況下最有可能具有非常不同的含義。
這不是文字。它看起來像你正在檢查的地址包含另一個指向棧上的東西。試試它爲(char **)0x7fffffffe9c8
,或其他一些雙指針類型。
編輯:爲了闡述,OP正在檢查調試器中的非文本數據並詢問編碼。正確的答案只是它不是文字。它是一個整數0x7fffffffebf3,它幾乎肯定是一個指向字符串的指針(因爲它沒有對齊並指向堆棧中某處),這意味着原始指針可能是char **
而不是char *
。
爲什麼downvote? OP正在調試器中檢查非文本數據並詢問編碼。正確的答案只是它不是文字。它是一個整數'0x7fffffffebf3',它幾乎可以肯定是一個指向字符串的指針(因爲它沒有對齊並指向堆棧的某處),這意味着原始指針可能是'char **'而不是'char *'類型。 – 2011-06-02 02:06:20
我的歉意 - 我誤解了你的答案。閱讀你評論中的解釋,答案確實有道理。不幸的是,除非您編輯答案,否則我無法撤銷downvote。 – 2011-06-02 13:22:30
你問的部分可以是該地址的shell代碼。
@ x4u,爲什麼不以ASCII或十六進制顯示,而是八進制? – cpuer 2011-06-02 01:51:35
因爲你告訴gdb把它解釋爲通常引用文本的char *'。 – x4u 2011-06-02 01:53:48
@ x4u,爲什麼八進制文本顯示? – cpuer 2011-06-02 02:02:12