gpt4 book ai didi

c++ - 未使用 -g 选项编译的代码的调用堆栈(gcc 编译器)

转载 作者:IT王子 更新时间:2023-10-29 00:59:12 27 4
gpt4 key购买 nike

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

最佳答案

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

然而,手动展开堆栈有点像魔法,因为您不知道编译器执行了哪些优化。当你粗略地知道你在代码中的位置时,你通常可以计算出堆栈上应该有什么并扫描内存以找到返回指针。然而,它相当复杂。您实际上花费了大量时间读取内存数据并寻找看起来像内存地址的数字,然后检查它是否合乎逻辑。这是完全可行的,我和我相信很多其他人已经做过很多次了:)

关于c++ - 未使用 -g 选项编译的代码的调用堆栈(gcc 编译器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4173023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com