GDB:为什么运行后内存映射会发生变化?

GDB:为什么运行后内存映射会发生变化?,gdb,Gdb,为什么运行后GDB中的内存映射会发生变化? 例如,下面的主函数最初为0x00000560,然后在run之后为0x80000560 是否可以以从一开始就显示真实映射的方式运行/配置gdb Reading symbols from prog...(no debugging symbols found)...done. (gdb) disas main Dump of assembler code for function main: 0x00000560 : push %ebp 0

为什么运行
后GDB中的内存映射会发生变化?
例如,下面的主函数最初为0x00000560,然后在
run
之后为0x80000560

是否可以以从一开始就显示真实映射的方式运行/配置gdb


Reading symbols from prog...(no debugging symbols found)...done.
(gdb) disas main
Dump of assembler code for function main:
   0x00000560 : push   %ebp
   0x00000561 : mov    %esp,%ebp
   0x00000563 : sub    $0x10,%esp
   0x00000566 : call   0x580 
   0x0000056b :    add    $0x1a95,%eax
   0x00000570 :    movl   $0x0,-0x4(%ebp)
   0x00000577 :    addl   $0x1,-0x4(%ebp)
   0x0000057b :    mov    -0x4(%ebp),%eax
   0x0000057e :    leave  
   0x0000057f :    ret    
End of assembler dump.
(gdb) run
Starting program: /home/mike/gdb/prog 
[Inferior 1 (process 9607) exited with code 01]
(gdb) disas main
Dump of assembler code for function main:
   0x80000560 : push   %ebp
   0x80000561 : mov    %esp,%ebp
   0x80000563 : sub    $0x10,%esp
   0x80000566 : call   0x80000580 
   0x8000056b :    add    $0x1a95,%eax
   0x80000570 :    movl   $0x0,-0x4(%ebp)
   0x80000577 :    addl   $0x1,-0x4(%ebp)
   0x8000057b :    mov    -0x4(%ebp),%eax
   0x8000057e :    leave  
   0x8000057f :    ret    
End of assembler dump.
例如,下面的主函数最初为0x00000560,运行后为0x80000

您有一个位置独立的可执行文件(实际上只是一种特殊的共享库,与
-pie
标志链接)。它在开始执行之前被重新定位到一个随机地址

请注意,GDB通常会尝试禁用地址随机化,因此在GDB下运行时,随机地址实际上不会有所不同。但是,当程序在GDB之外运行时,或者如果使用
(GDB)将禁用随机化设置为off时,它会有所不同

例如,下面的主函数最初为0x00000560,运行后为0x80000

您有一个位置独立的可执行文件(实际上只是一种特殊的共享库,与
-pie
标志链接)。它在开始执行之前被重新定位到一个随机地址

请注意,GDB通常会尝试禁用地址随机化,因此在GDB下运行时,随机地址实际上不会有所不同。但是,当程序在GDB之外运行时,或者如果使用
(GDB)将禁用随机化设置为off时,它会有所不同