现在我已经使用GDB反汇编一个二进制文件,并检查出不同的寄存器和什么。 有一个简单的命令来检查堆栈上的一切吗? 这可以限制在一个function的一切?
当我运行我的C ++程序时,它崩溃了这个错误。 *检测到glibc * ./load:double free或者腐败(!prev):0x0000000000c6ed50 *** 我试图使用cout声明来追踪它,但是我发现它很困难。 gdb可以使这更容易吗? 它是如何完成的?
我通常运行我的程序: perl -e 'print "A"x200' | ./vuln_prog stdin被C ++中的gets()函数所使用。 如果这只是一个命令参数,我可以通过执行以下命令打开gdb: gdb ./vuln_prog run $(perl -e 'print "A"x200') 但是,我的场景不是命令参数,而是input(STDIN?)。 我怎样才能在gdb中debugging呢? 我尝试了一堆选项,但似乎没有真正的工作。 我通常会在进程上运行gdb,当它提示用户input时,input它,但是我不想只input“A”。 我想input\ x00- \ xff中的所有字符,我无法input。
list命令打印一组行,但我需要一个单一的行,我在哪里,可能发生错误。
使用gcc或Clang编译C源代码时,我始终使用-g标志为gdb生成debugging信息。 gcc -g -o helloworld helloworld.c 我注意到有人推荐-g3 。 -g和-g3标志有什么-g3 ? -g和-ggdb也有区别吗?
我在OSX 10.8.4下,并安装了gdb 7.5.1自制软件(动机获取一个新的特性,例如–with-python等…) 长篇小说,当我在一个c + + Eclipse项目中运行debugging我得到: Error in final launch sequence Failed to execute MI command: -exec-run Error message from debugger back end: Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned – see taskgated(8)) Unable to find Mach task port for process-id 46234: (os/kern) failure […]
我知道我们可以使用几个命令来访问和读取内存:例如,print,p,x … 但是我怎样才能在任何特定的位置更改内存的内容(在GDB中debugging的时候)呢?
那些使用Visual Studio的人会熟悉Shift + F11 热键 ,这个热键从一个函数中跳出来,这意味着它继续执行当前函数,直到它返回给它的调用者,然后停止。 gdb中是否有相同的内容?
当试图在gdb中添加断点时,我不断收到这个错误信息。 我用这些命令来编译: gcc -g main.c utmpib2.c -o main.o and: cc -g main.c utmpib2.c -o main.o and also: g++ -g main.c utmpib2.c -o main.o 我也试过“-ggdb”而不是“-g”,我仍然得到这个错误信息。 然后我执行gdb: $gdb 在gdb中: (gdb)exec-file main.o (gdb)break 59 No symbol table is loaded. Use the "file" command.
当我使用gcc编译C程序时,我通常使用-g来获取一些debugging信息到elf文件中,这样gdb可以在需要时帮助我。 但是,我注意到有些程序使用-ggdb ,因为它应该使debugging信息更加友好。 他们如何不同,build议使用? 注意:指向debugging程序或GCC选项的链接, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options