2012-02-27 35 views
2

请帮我解决这个问题。我执行以下在gdb和控制台输出命令被如下 -gdb抛出错误说程序有一个函数“malloc”

Rohan_gdb $组是$ var = 15

Rohan_gdb $ P $变种

$ 5 = 0xf

Rohan_gdb $组是$ var =为(int *)10

Rohan_gdb $ p $变种

$ 6 =(INT *)是0xA

Rohan_gdb $集合$炭= “ABC”

Rohan_gdb $ P $炭

$ J = “ABC”

Rohan_gdb $集合$焦炭=(字符*) “XYZ”

评估这个表达式需要程序具有一个函数 “malloc”。 * //这里我得到错误.... *

Rohan_gdb $ P $焦炭

$ 8 = “ABC”

Rohan_gdb $

我在这里与目标调试而不是本机调试。我正在使用GNU gdb(GDB)7.2版本。是否可以使用脚本解决。 任何人都可以帮我解决这个问题。在此先感谢.....

回答

2

我不知道如何解决您的具体问题,但我碰到类似的东西。鉴于问题的年龄,也许这将提供一个线索。

问题是您的脚本正在尝试将值存储在缓冲区中,并且它必须为该存储分配一个新的缓冲区。存储需求可能是由于转换或第二个字符串不在二进制文件中的常量字符串中。

要修复,要么改变你的代码,不要求malloc(这是一个点击或错过,据我所知)。或者使malloc符号可用;加载符号表,该表允许gdb解析“_malloc”符号。

+0

malloc是在标准C库中,你如何加载符号? – Michael 2016-01-17 18:04:43

+0

这是一个非常好的问题。通常情况下,标准C库的符号对于我工作的环境来说“就在那里”。鉴于OP的问题的背景,我怀疑它们处于并非如此的环境中。坦率地说,最简单的解决方案是编译一个围绕malloc()的存根包装器,并与它链接并手动调用它。说实话,自从我不得不建立标准库以来,这已经很长时间了,如果没有大量研究,我现在不知道如何去做。 – bbum 2016-01-17 18:51:57

相关问题