让我先说明这是我的第一个 C 编程课程的项目。我不打算提供我的代码,因为它正在工作,但只需要帮助我在执行期间从 GDB 收到错误。
话虽如此,我项目的第一部分是编写一个程序,该程序将采用字节形式的任何文件,并定位特定长度的字符串。这有效。下一部分是我提供 (3) 编译的 C 文件,我需要使用 GDB 以及十六进制编辑器和我的程序来找出解锁程序的隐藏密码。我得到了第一个,但第二个和第三个难度越来越大,我无法弄清楚我做错了什么。
这是我的问题:
当我使用 GDB 开始运行编译文件时,我立即遇到 GDB 中闪烁的光标。我按下cntrl c以中断程序,该程序在其轨道中暂停程序。然后我输入back并获取 (9) 行的列表、它们的内存位置以及它们的方法名称。这就是我的问题所在,如果我想去main(),并且我尝试进入休息,它会告诉我No symbol table is loaded.  Use the "file" command。  
Starting program: [program path on university server] 
^C
Program received signal SIGINT, Interrupt.
0x00110430 in __kernel_vsyscall ()
Missing separate debuginfos, use: debuginfo-install glibc-2.12-
1.132.el6_5.3.i686
(gdb) list
No symbol table is loaded.  Use the "file" command.
(gdb) back
#0  0x00110430 in __kernel_vsyscall ()
#1  0x00c8f8d3 in __read_nocancel () from /lib/libc.so.6
#2  0x00c2972b in _IO_new_file_underflow () from /lib/libc.so.6
#3  0x00c2b44b in _IO_default_uflow_internal () from /lib/libc.so.6
#4  0x00c2ca5a in __uflow () from /lib/libc.so.6
#5  0x00c1f36c in _IO_getline_info_internal () from /lib/libc.so.6
#6  0x00c1f2b1 in _IO_getline_internal () from /lib/libc.so.6
#7  0x00c1e1ea in fgets () from /lib/libc.so.6
#8  0x0804851c in main ()
(gdb) 
我看过其他线程,如gdb:“没有加载符号表”,我认为这与我无关,因为我试图“破解”的文件已经编译并提供给我。所以我不是在调试 C 源文件,而是在调试之后的压缩文件。
这是我现在的挣扎,希望得到任何解释或帮助我解决No symbol table is loaded.我遇到的问题。
No symbol table loaded您收到的消息具有误导性:所有GDB 告诉您的是您的二进制文件中没有任何调试信息。
通常这是通过使用-g标志重建二进制文件来解决的,但是由于您获得了一个已经编译和链接的文件,因此您不能这样做。
如果没有调试信息,某些命令,如list,break file.c:line或break line将无法正常工作。但是其他命令,例如:disassemble和break function 将起作用,这就是您必须用于此分配的命令。
是否有可用和不可用代码的命令列表
不是我所知道的。但是您可以从了解调试信息包含的内容中推断出该列表是什么。
调试信息一般包含:
list和break foo.c:123不能工作。)ptype并whatis和info locals不能工作。)info locals,print a_local_var,print &a_local_var不能工作。)