我可以在c源中找到一定大小的结构吗?

时间:2012-07-16 08:53:02

标签: c gdb sizeof coredump

我正在尝试调试一个核心转储(主要使用gdb),到目前为止我发现的是,有一个正好124字节的结构,这会导致问题。鉴于该计划的所有来源,有没有办法找到这个结构? (我的意思是有一种方法可以找到结构,其大小为124字节)

  • PS。我知道这个结构的确切位置,但没有 如果我看一下就知道它的目的。它也是常见的结构, 所以我可以根据自己的意愿制作尽可能多的核心转储。

  • PS2。到目前为止我试过了:

    1. 使用正则表达式grep '^ *[a-zA-Z][^ ;,."()]* [a-zA-Z][^ ;,."()]*' * | grep -v 'return' | sed 's/[^:]*: *\([^ ]*\).*/\1/' | sort | uniq > tmp.txt,将p sizeof(x)添加到每个找到的行和 输入到gdb。
    2. 在gdb,日志输出中使用info variables,提取变量类型 并将sizeof(x)添加到每个类型并输出到gdb。

2 个答案:

答案 0 :(得分:2)

尝试使用它:

objdump -W <elf-name> | grep -B 2 "DW_AT_byte_size   : 124"

此命令转储ELF文件中的所有调试符号,并查找大小为124。

答案 1 :(得分:2)

在所有源文件包含的头文件中,定义一个宏

#define malloc(size) my_malloc(size, __FILE__, __LINE__)

然后在实施中:

#undef malloc
void * my_malloc(size_t size, const char* file, int line)
{
    //if the size equal to 124 bytes, log it, then you will have a chance know where this kind of allocation happens, so you know the struct.
    if(124==size) printf(...);

    return malloc(size);
}
相关问题