2013-08-31 22 views
8
abijith bufferOverFlow $ gdb a.out 
GNU gdb (GDB) 7.6 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "x86_64-unknown-linux-gnu". 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>... 
Reading symbols from /home/abijith/Project/Security/bufferOverFlow/a.out...done 
(gdb) r 
Starting program: /home/abijith/Projec2qt/Security/bufferOverFlow/a.out 
warning: no loadable sections found in added symbol-file system-supplied 
SO at 0x7ffff7ffd000 

Tôi đã viết một chương trình đơn giản in chuỗi và trả về. Tôi đã có thể thực hiện trực tiếp, bằng cách nhập "./a.out". Nhưng khi tôi chạy nó trong gdb lỗi đã đề cập ở trên xảy ra. Tôi đã thử biên dịch mã bằng cách sử dụng cờ "-g" và không sử dụng mã đó. Cả hai lần đều cho kết quả tương tự. Bất cứ ai có thể giúp tôi với vấn đề này?Cảnh báo GDB: Không thể tìm thấy phần có thể tải trong DSO được cung cấp bởi hệ thống tệp biểu tượng được thêm vào tại 0x7ffff7ffd000

+0

các thông số khác mà bạn đã chuyển 'gcc' là gì? bạn có thể đăng lệnh đầy đủ mà bạn đã sử dụng để biên dịch và liên kết nó không? –

+0

Tôi đã thử các lệnh sau: gcc -g test.c gcc test.c –

+1

bạn đang sử dụng một hạt nhân cũ? https://bugzilla.redhat.com/show_bug.cgi?id=312011 – Alex

Trả lời

3

nhắn đó,

warning: no loadable sections found in added symbol-file system-supplied 

SO tại 0x7ffff7ffd000

là một cảnh báo rằng không ngăn cản GCC chạy a.out; ít nhất, nó không nên.

Người ta nói rằng có một đối tượng được tải động được sử dụng bởi a.out thiếu biểu tượng. Không có gì về a.out chính nó.

Bạn có thể thử tạo a.out dưới dạng tệp thực thi tĩnh; như thế này:

gcc -static a.c 

Rõ ràng, thêm bất kỳ đối số trình biên dịch nào cần thiết.

Là tệp thi hành tĩnh, bạn sẽ không nhận được cảnh báo đó từ GCC. Những biểu tượng này vẫn có thể bị thiếu, nhưng nó không ảnh hưởng đến việc thực hiện chương trình.

+0

Điều này có thể không thực sự hoạt động; "tệp" được đề cập được đưa vào không gian địa chỉ tiến trình bởi hạt nhân tại thời gian exec(), bất kể chương trình được đề cập được liên kết như thế nào. Ngoài ra, trình gỡ lỗi còn được gọi là GDB. – SamB

+1

@SamB - yup, GDB đang cố gắng chạy tệp thi hành và dẫn đến cảnh báo được đề cập. Hãy thử một lần. "Có lẽ không làm việc" không làm gì nhiều đối với độ phân giải. – ash

+0

@SamB đúng. Atleast gcc [email protected] hoạt động giống hệt nhau và không có '-static'. Mẫu mã của tôi quá đơn giản để hiển thị nó ở đây – dyomas

2

Dường như đây là lỗi trong glibc hoặc gdb (tùy thuộc vào nơi bạn muốn đổ lỗi). Nó rõ ràng là vô hại - gdb sẽ hoạt động tốt.

Đó là do một số phép thuật mà hạt nhân Linux thực hiện trên các tệp nhị phân mà nó chạy. Để biết chi tiết, hãy xem Debian bug report 738702gdb bug report 13097 gốc.

Có một bản vá để sửa lỗi này, mà Debian đã áp dụng gần đây, do đó vấn đề không còn xảy ra với GDB 7.7.1 trên Debian nữa.

Các vấn đề liên quan