我正在使用gdb
disassemble my_fun
# 0x7ffff5792a60 <PRIVATE0000000000579168>: push %r12
# => 0x7ffff5792a62 <PRIVATE0000000000579168+2>: push %r13
# 0x7ffff5792a64 <PRIVATE0000000000579168+4>: push %r14
我注意到指令的存储位置,例如0x7ffff5792a60
在不同的gdb
调试会话中是相同的。
怎么可能?它是虚拟内存地址吗?我们保证有相同的内存地址吗?它取决于应用程序的编译方式吗?
答案 0 :(得分:2)
我注意到指令的存储位置,例如0x7ffff5792a60 在不同的gdb调试会话中是相同的。
这是正确的,因为默认情况下gdb会禁用虚拟地址空间的随机化。您可以尝试使用set disable-randomization off
启用随机化,并且可能会在地址0x7ffff5792a60
处看到另一条指令。见documentation:
在
上设置禁用随机化此选项(在GDB中默认启用)将关闭本机 随机化已启动程序的虚拟地址空间。 此选项对于多个调试会话非常有用 执行更好的可重复性和内存地址可重用 调试会话。