2012-12-20 77 views
14

我正在編譯下面的簡單代碼,並在gdb中運行它。我在strcpy的行設置一個斷點,當我運行它的輸入,例如ABC,然後按S,我得到以下錯誤:strcpy-sse2-unaligned.S未找到

Breakpoint 1, main (argc=2, argv=0x7fffffffdd98) at ExploitMe.c:9 
9   strcpy(buffer, argv[1]); 
(gdb) s 
__strcpy_sse2_unaligned() at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:48 
48 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory. 

我使用Ubuntu 12.04 AMD64和gcc 2.15 。任何想法?


main(int argc, char *argv[]) { 

    char buffer[80]; 

    strcpy(buffer, argv[1]); 

    return 0; 
} 
+3

這不是一個錯誤 - gdb找不到'strcpy'實現的源文件,但它仍然會顯示反彙編的代碼。 –

+0

是的,我注意到了,但是爲什麼?和任何想法如何解決它? – Afshin

+1

不知道爲什麼這是downvoted ... – Mehrdad

回答

13

它是完全無害的調試時忽略這些 「錯誤」。

該錯誤僅僅是因爲GDB正在尋找strcpy函數的來源。 libc中的任何功能,你沒有來源,你會給一個類似的錯誤,如:

int *p = malloc(sizeof *p); 

則...

(gdb) s 
5  int *p = malloc(sizeof *p); 
(gdb) s 
__GI___libc_malloc (bytes=4) at malloc.c:2910 
2910 malloc.c: No such file or directory. 

您可以隨時下載GNU libc中的源,並將其鏈接與GDB:

git clone https://github.com/jeremie-koenig/glibc /opt/src/glibc 

則...

(gdb) dir /opt/src/glibc/malloc 
(gdb) s 
5  int *p = malloc(sizeof *p); 
(gdb) s 
__GI___libc_malloc (bytes=4) at malloc.c:2910 
2910    } 
(gdb) s 
2915   } else if (!in_smallbin_range(size)) 

...這將讓你步穿malloc的源代碼。這不是特別有用,但它有時可以派上用場。

+0

非常感謝,解決了我的問題;) – Afshin

+1

只要確保您複製與您在系統上使用的相同版本。最新的,這是你從git clone得到的,或許不是你的系統上安裝的(也可能不是最好的主意!) –

+1

就像快速提醒一樣,如果你使用gdb,你可以使用n(for下一步)跳過這些函數調用的行。 – Sum