指令存储器地址是否改变?

时间:2018-01-25 13:43:28

标签: linux assembly gdb

我正在使用gdb disassemble my_fun

#    0x7ffff5792a60 <PRIVATE0000000000579168>:  push   %r12
# => 0x7ffff5792a62 <PRIVATE0000000000579168+2>:    push   %r13
#    0x7ffff5792a64 <PRIVATE0000000000579168+4>:    push   %r14

我注意到指令的存储位置,例如0x7ffff5792a60在不同的gdb调试会话中是相同的。

怎么可能?它是虚拟内存地址吗?我们保证有相同的内存地址吗?它取决于应用程序的编译方式吗?

1 个答案:

答案 0 :(得分:2)

  

我注意到指令的存储位置,例如0x7ffff5792a60   在不同的gdb调试会话中是相同的。

这是正确的,因为默认情况下gdb会禁用虚拟地址空间的随机化。您可以尝试使用set disable-randomization off启用随机化,并且可能会在地址0x7ffff5792a60处看到另一条指令。见documentation

  

上设置禁用随机化      

此选项(在GDB中默认启用)将关闭本机   随机化已启动程序的虚拟地址空间。   此选项对于多个调试会话非常有用   执行更好的可重复性和内存地址可重用   调试会话。