让我先说明这是我的第一个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: "No symbol table is loaded"之类的其他帖子了,我不认为这与我有关,因为我试图"破解"已编译并提供给我。所以我并没有完全调试C源文件,而是之后的压缩文件。
这是我现在的斗争,并希望得到任何解释或帮助我如何解决我遇到的No symbol table is loaded.
问题。
答案 0 :(得分:3)
您收到的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
无法正常工作。)