(gdb) n Cannot find bounds of current function

本文指导如何在GDB调试中遇到动态库链接错误时,识别并解决`Cannot find bounds of current function`的问题,涉及plt表、ldd检查和汇编指令的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GDB 调试出现错误出现这样的错误,并产生 segment fault;

0x00008766 in ?? ()
(gdb) n
Cannot find bounds of current function

我遇到的问题是因为动态库链接错误而导致的,解决方案如下:

但当遇到这个问题的时候,我继续单步调试,但是当遇到某个函数的时候我发现当我使用 s 命令单步调试的时候却没法进入该函数,会出现这样的错误:

Cannot find bounds of current function

所以这个时候我们应该明白该函数实际上没有被成功调用,问题出现在调用该函数之前,因而我们需要使用 si 和 ni 通过汇编指令的方式进行调试,查看出现问题的具体的指令,看看其中能不能找到问题的根本原因;在调试的时候用 disassemble 查看执行到哪一条指令,我通过执行发现当调用这样<xxxx@plt>这样一条指令时出现段错误,其中xxx为某个函数名;
在这里插入图片描述
很明显这样的错误是因为动态链接符号引起的,plt的全称为Procedure Link Table, 详细可查阅动态链接相关原理;
这个时候我们已经需要明确<xxxx@plt>xxx函数所引用的动态库是否正确链接或者说我们的编译选项是否添加动态库的相关地址和选项,通过 执行:

ldd 可执行文件名

可以查看你所引用的动态库的链接情况,然后正确的链接就行;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值