我正在尝试调试一个核心转储(主要使用gdb),到目前为止我发现的是,有一个正好124字节的结构,这会导致问题。鉴于该计划的所有来源,有没有办法找到这个结构? (我的意思是有一种方法可以找到结构,其大小为124字节)
PS。我知道这个结构的确切位置,但没有 如果我看一下就知道它的目的。它也是常见的结构, 所以我可以根据自己的意愿制作尽可能多的核心转储。
PS2。到目前为止我试过了:
grep '^ *[a-zA-Z][^ ;,."()]* [a-zA-Z][^
;,."()]*' * | grep -v 'return' | sed 's/[^:]*: *\([^ ]*\).*/\1/' |
sort | uniq > tmp.txt
,将p sizeof(x)
添加到每个找到的行和
输入到gdb。info variables
,提取变量类型
并将sizeof(x)添加到每个类型并输出到gdb。答案 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);
}