不同十六进制地址与调用堆栈跟踪的意义



这些不同的十六进制地址(用粗体表示)的意义是什么?) ?如何从崩溃转储堆栈的十六进制地址中获得下面转储函数的源代码的确切问题行数,具体用于ios平台构建。我知道add2line是用来从十六进制地址获取行号的linux平台。

==8587==ERROR: AddressSanitizer: heap-use-after-free on address 0x611000112680 at pc 0x000124c4c2e5 bp 0x700003c58130 sp 0x700003c58128
READ of size 8 at 0x611000112680 thread T32

# 00 x124c4c2e4in fun1(param1,param2, param3)+0xac4(TestApp: x86_64 +0 x122eba2e4)

#1 0x124c4d88a in fun2(param1)+0x29a (TestApp:x86_64+0x122ebb88a)

这些不同的十六进制地址的意义是什么

第一个数字(0x124c4c2e4)是检测到heap-use-after-free的指令地址。

第二个数字:0xac4表示地址0x124c4c2e4& fun1()+0xac4相同,即fun1()内部发生错误访问。

最后一个数字告诉你问题函数位于哪个二进制中,以及与该二进制的映射位置的偏移量。

那么,我们可以推断出&fun1() == 0x124c4c2e4 - 0xac4 == 0x124c4b820TestApp被映射到0x124c4c2e4 - 0x122eba2e4 == 0x1d92000

如何获得源代码的确切问题行数

必须用调试信息编译代码。注意:地址可能会改变——你需要用-g重新构建并获得一个新的报告。

我知道add2line是用来从十六进制地址获取行号的linux平台。

这个答案可能有用。

最新更新