【发布时间】:2018-12-06 04:34:57
【问题描述】:
这是一个关于 ASLR 的基本问题
如果我有一个未启用 ASLR 的二进制文件。但是它使用的libc文件开启了ASLR,那么libc文件中system()的地址会不会每次都是随机的呢?
还是因为主二进制文件本身没有启用 ASLR,所以每次地址都相同?
在 gdb 中,我正在获取 system() 函数的地址,如下所示:
(gdb) break main
(gdb) run
(gdb) print &system
那么,这是从 libc 还是主二进制文件的 PLT 中返回 system() 的地址?
另外,如果我有一个来自另一个系统的 libc 文件,那么我如何在其中找到 system() 的地址?默认情况下,如果我在主二进制文件上运行 gdb,它将在本地系统上找到 libc 的 system() 地址。我是否必须告诉 gdb 加载 libc 文件(我从远程系统获得)?
【问题讨论】: