为什么每次都从同一个内存地址执行一个函数?

Mas*_*ask 10 x86 memory-management relocation disassembly

我正在拆解可执行文件:

(gdb) disas main
Dump of assembler code for function main:
0x004012d0 <main+0>:    push   %ebp
0x004012d1 <main+1>:    mov    %esp,%ebp
...
Run Code Online (Sandbox Code Playgroud)

每次内存地址相同:0x004012d0.

操作系统不是要动态分配的内存地址吗?

UPDATE

现在我看到它的虚拟空间,它可以在某些平台上随机化.

有人可以发布更改的gdb转储吗?

小智 -3

为什么操作系统会选择不同的地址?

当操作系统执行进程时,它将可执行文件加载到虚拟内存空间中。在此过程中,它将解析任何相对和/或符号引用。假设您有相同的可执行文件和相同的共享库,并以与上次相同的方式启动它,那么操作系统决定以不同的方式加载可执行文件会很奇怪