我在内存中有一个地址,我想找出该内存地址的权限(r/w/x)。例如char*s="hello";这里,字符串文字“hello”存储在只读内存中。通过gdb运行程序时,是否可以检查该内存地址的权限(是否只允许读取等)? 最佳答案 你可以先找到s指向的地方:(gdb)prints$6=0x400dbc"foo"然后找到它所在的部分:(gdb)maintenanceinfosectionsExecfile:`/home/mfukar/tmp',filetypeelf64-x86-64....sections...0x00400db8->0
我在Linux中使用c++编写了一个非常简单的程序,它使用cURL库通过http从某个网站下载图像(基本上开发了一个http客户端请求)。http://curl.haxx.se/libcurl/c/allfuncs.html#defineCURL_STATICLIB#include#include#include#include#includesize_twrite_data(void*ptr,size_tsize,size_tnmemb,FILE*stream){size_twritten=fwrite(ptr,size,nmemb,stream);returnwritten;}in
我已经通过官方存储库在Ubuntu14.04中安装了Code::Blocks13.12。当我编译时,一切正常。但是当我调试时,shell中显示以下消息:warning:GDB:Failedtosetcontrollingterminal:Operationnotpermitted程序执行到断点,但当我执行下一行时,什么也没有显示。如何解决这个问题?PD:我已经安装了最新版本的GDB(存储库中的那个)。我还尝试使用linux终端而不是Codeblocks显示的终端。 最佳答案 我认为这只是意味着code::blocks正在“CLI”模
我有一个一般的gdb/gdbserver问题。我正在尝试在主机上使用gdb并在远程目标上使用gdbserver来调试armlinux嵌入式应用程序。我可以单步执行main开头的代码行。但是,gdb(或gdbserver)似乎在调用共享库函数后丢失了。即使我在调用后设置断点并继续使用,它也永远不会到达断点。我知道我在共享库中没有符号,而且真的不想进入它们。即使符号不在共享库中或至少继续到下一个断点,我是否应该能够成功地跨过gdb中的库调用?或者这是否表明存在不同类型的问题? 最佳答案 按地址断点,而不是按符号,有时更可靠。试试这个:(
我正在尝试调试在Windows主机上针对Linux目标交叉编译的应用程序。问题:由于初始编译是在Windows中进行的,因此二进制文件中存储的源文件路径的格式为C:\Users\foo\project\...。在Linux目标上,我将源文件放在\home\foo\project\....默认情况下,由于路径不同,gdb找不到源文件。到目前为止我尝试了什么:在gdb中使用“directory”命令为正在调试应用程序的目标Linux系统中的.c源文件提供准确路径。这可行,但不幸的是,实际上有数百个文件,因此该解决方案不切实际。使用setsubstitute-pathC:\\Users\\f
我正在使用arm-linux-gcc通过-g在主机(debiani386)上编译一个简单的C文件。然后将a.out文件复制到目标(arm,uclibc)电脑上。运行a.out–一切正常。使用GDB(target)gdba.out并列出源代码,它显示Nosuchfileordirectory。事实一直如此?如果我将1.c文件复制到目标,然后使用list命令列出源代码。我的问题:GDB一直如此,还是有其他我可以控制的选项?您对调试程序有什么建议吗?一些信息可能有用:源代码1.c文件:#include#include#include//mainfunctionintmain(void){
有谁知道这个错误是什么意思?我在Linux机器上使用Netbeans8.0、gdb7.8.1。两天前一切都很好,然后当我开始调试时突然开始出现这个错误,我不知道这是什么意思。到目前为止,我正在尝试清理和重置我能想到的一切:重新安装netbeans、清理所有本地文件、再次rebase我的代码、取消设置所有断点等等。谁能帮我理解这个错误是什么意思?我从未设置过这些断点,Netbeans从哪里获取它们?提前致谢,雷切尔编辑所以现在我有更多的细节:当我尝试直接使用GDB调试我的应用程序时,没有netbeans我收到以下错误:Startingprogram:....warning:Selecte
我正在学习OpenSecurityTraining中的这些类(class).我已经到了实验室部分,我必须在CMU炸弹上训练自己。他们提供了一个x86_64编译的CMUBomb,你可以在这里找到它来训练:CMUBombx86-64最初来自CMULabsforComputerSystems:AProgrammer'sPerspective(CS:APP)1stedition的32位炸弹.我有一个虚拟化的64位ElementaryOS发行版,我在其中使用GDB毫无问题地反汇编了CMUBomb。现在,我有一个64位Ubuntu14.04LTS(未虚拟化),当我尝试重现我在ElementaryO
我正在Linux上调试静态多线程x86-64C++应用程序。我可以在函数上设置断点并停止,我可以一步一步地遍历函数体。但是当我尝试进入另一个函数时,gdb并没有在它开始时停止,它似乎只是继续执行。当我中断程序执行时,gdb进入中断状态并变得不可用:(gdb)btTargetisexecuting.(gdb)cContinuing.Cannotexecutethiscommandwhiletheselectedthreadisrunning.(gdb)作为解决方法,我可以多次使用stepi而不是step,stepi可以按预期工作。这种行为的原因可能是什么?除了使用stepi之外还有什么解
我已经下载了gdb-6.5.bz2.tar。解压这个文件。我写的:LDFLAGS=-静态./配置但结果我得到了一个gdb,它需要一个so文件,例如:ncurses.so.5libc.so.0等我如何静态构建? 最佳答案 Thismessage似乎暗示正确的用法是$makeLDFLAGS=-static这似乎令人惊讶。不幸的是,它还说它构建失败,并且没有后续行动。消息仍然是1999年的,所以一切可能都变了,也许今天的正确方法是按照你的方式去做。 关于c-我如何从源代码静态构建GDB?,我们