草庐IT

c - 使用 gdb 将地址转换为行

我有一个由剥离的应用程序生成的堆栈跟踪,如下所示:***Checkfailurestacktrace:***@0x7f0e442d392d(unknown)@0x7f0e442d7b1f(unknown)@0x7f0e442d7067(unknown)@0x7f0e442d801d(unknown)@0x7f0e457c55e6(unknown)@0x7f0e457c5696(unknown)@0x4e8765(unknown)@0x4a8b43(unknown)@0x7f0e43197ced(unknown)@0x4a6889(unknown)我有一个非剥离版本的可执行文件及其所有库

c - 尝试将 GDB 附加到进程时如何解决 "ptrace operation not permitted"?

我正在尝试使用gdb附加一个程序,但它返回:Attachingtoprocess29139Couldnotattachtoprocess.Ifyouruidmatchestheuidofthetargetprocess,checkthesettingof/proc/sys/kernel/yama/ptrace_scope,ortryagainastherootuser.Formoredetails,see/etc/sysctl.d/10-ptrace.confptrace:Operationnotpermitted.gdb-debugger返回“无法附加到进程,请检查权限并重试。”st

c - 尝试将 GDB 附加到进程时如何解决 "ptrace operation not permitted"?

我正在尝试使用gdb附加一个程序,但它返回:Attachingtoprocess29139Couldnotattachtoprocess.Ifyouruidmatchestheuidofthetargetprocess,checkthesettingof/proc/sys/kernel/yama/ptrace_scope,ortryagainastherootuser.Formoredetails,see/etc/sysctl.d/10-ptrace.confptrace:Operationnotpermitted.gdb-debugger返回“无法附加到进程,请检查权限并重试。”st

c - 如何检测当前进程是否正在由 GDB 运行

标准方法如下:if(ptrace(PTRACE_TRACEME,0,NULL,0)==-1)printf("traced!\n");在这种情况下,如果当前进程被跟踪(例如,使用GDB运行它或附加到它),ptrace会返回一个错误。但是这样做有一个严重的问题:如果调用成功返回,GDB以后可能不会附加到它。这是一个问题,因为我没有尝试实现反调试的东西。我的目的是在满足条件(例如,断言失败)并且GDB正在运行(否则我得到一个停止应用程序的SIGTRAP)时发出一个“int3”。每次都禁用SIGTRAP并发出“int3”不是一个好的解决方案,因为我正在测试的应用程序可能会将SIGTRAP用于其

c - 如何检测当前进程是否正在由 GDB 运行

标准方法如下:if(ptrace(PTRACE_TRACEME,0,NULL,0)==-1)printf("traced!\n");在这种情况下,如果当前进程被跟踪(例如,使用GDB运行它或附加到它),ptrace会返回一个错误。但是这样做有一个严重的问题:如果调用成功返回,GDB以后可能不会附加到它。这是一个问题,因为我没有尝试实现反调试的东西。我的目的是在满足条件(例如,断言失败)并且GDB正在运行(否则我得到一个停止应用程序的SIGTRAP)时发出一个“int3”。每次都禁用SIGTRAP并发出“int3”不是一个好的解决方案,因为我正在测试的应用程序可能会将SIGTRAP用于其

linux - 如何禁用 gdb 中的新线程/线程退出消息?

我正在调试一个应用程序,我收到很多这样的消息:[NewThread0x7fffde152700(LWP11142)][Thread0x7fffde152700(LWP11142)exited][NewThread0x7fff967fa700(LWP11143)][Thread0x7fff967fa700(LWP11143)exited][NewThread0x7fff967fa700(LWP11144)][Thread0x7fff967fa700(LWP11144)exited][NewThread0x7fff967fa700(LWP11145)][Thread0x7fff967fa7

linux - 如何禁用 gdb 中的新线程/线程退出消息?

我正在调试一个应用程序,我收到很多这样的消息:[NewThread0x7fffde152700(LWP11142)][Thread0x7fffde152700(LWP11142)exited][NewThread0x7fff967fa700(LWP11143)][Thread0x7fff967fa700(LWP11143)exited][NewThread0x7fff967fa700(LWP11144)][Thread0x7fff967fa700(LWP11144)exited][NewThread0x7fff967fa700(LWP11145)][Thread0x7fff967fa7

c - 如何使用 GDB 修改内存内容?

我知道我们可以使用几个命令来访问和读取内存:例如,print、p、x...但是我怎样才能改变任何特定位置的内存内容(在GDB中调试时)? 最佳答案 最简单的方法是设置程序变量(参见GDB:assignment):(gdb)l6{7inti;8structfile*f,*ftmp;9(gdb)setvariablei=10(gdb)pi$1=10或者您可以通过地址更新任意(可写)位置:(gdb)set{int}0x83040=4还有更多。阅读themanual. 关于c-如何使用GDB修改

c - 如何使用 GDB 修改内存内容?

我知道我们可以使用几个命令来访问和读取内存:例如,print、p、x...但是我怎样才能改变任何特定位置的内存内容(在GDB中调试时)? 最佳答案 最简单的方法是设置程序变量(参见GDB:assignment):(gdb)l6{7inti;8structfile*f,*ftmp;9(gdb)setvariablei=10(gdb)pi$1=10或者您可以通过地址更新任意(可写)位置:(gdb)set{int}0x83040=4还有更多。阅读themanual. 关于c-如何使用GDB修改

c - 在 Linux 中启动 GDB 时如何传递命令行参数?

这个问题在这里已经有了答案:HowdoIrunaprogramwithcommandlineargumentsusingGDBwithinaBashscript?(9个回答)关闭2年前。作为我的任务的一部分,我必须调试一个有错误的程序。但是,我必须先传递命令行参数才能解决这个问题。我愿意:gdb-tuiInsertionSortWithErrors这可行,但之后我不知道如何传递参数。我使用了gdb-help,它说明了一些关于--args的内容,我也尝试过,但没有成功。我希望能够获得调试器+GUI并传递命令行参数。 最佳答案 gdb启