我遇到了核心转储(在远程系统上生成)与.o文件中的符号不匹配的情况。我怀疑这是由于ASLR造成的。不幸的是,我不确定ASLR应该如何与核心转储一起工作,所以我无法验证。
我的逻辑是,因为coredump转储实际内存,所以必须将ASLR偏移合并到核心文件本身中(所以现在,核心文件中对函数foo
的所有地址引用实际上都包含foo.vaddr + aslr_offset
)。gdb必须知道aslr偏移量是什么,以便将该地址转换回foo
。不过,我没有找到aslr偏移量存储在核心文件中的位置。有人知道这样的机制是否存在吗?如果存在,它应该如何运作?
1条答案
按热度按时间wwtsj6pe1#
有人知道这样的机制是否存在吗?如果存在,它应该如何运作?
它确实存在,您可以通过创建一个本地
core
并将其加载到GDB中来验证。您可以在
NT_FILE
注解中检查file
到segment
的Map。我不确定这是不是GDB实际使用的机制。