我如何分析核心转储(使用gdb)
哪些不是使用-g GCC选项编译的?

最佳答案

生成 map 文件。映射文件将告诉您每个函数的起始地址(作为exe开头的偏移量,因此您也需要知道加载的基地址)。因此,您然后查看指令指针并查找它在映射文件中的位置。这使您可以很好地了解给定功能中的位置。

但是,手动取消堆栈栈有点荒唐,因为您不知道编译器执行了哪些优化。当您大致知道代码所在的位置时,通常可以算出应该在栈中的内容,然后遍历内存以查找返回指针。它的参与。您实际上花费了大量时间来读取内存数据,寻找看起来像内存地址的数字,然后检查该数字是否符合逻辑。它是完全可行的,而且我相信很多其他人已经做到了很多次:)

10-08 03:55
查看更多