【问题标题】:Does ASLR enabled libc randomize function address?ASLR 是否启用了 libc 随机函数地址?
【发布时间】: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 文件(我从远程系统获得)?

【问题讨论】:

    标签: linux gdb aslr


    【解决方案1】:

    但是它使用的libc文件开启了ASLR,那么libc文件中system()的地址会不会每次都是随机的呢?

    是的(假设您没有通过其他方式禁用 ASLR)。请注意,GDB 默认禁用 ASLR。如果你想在 GDB 下运行程序时观察 ASLR 效果,需要set disable-randomization off

    另外,如果我有一个来自另一个系统的 libc 文件,那么我如何在其中找到 system() 的地址?

    这很简单:nm libc.so.6 | grep ' system'。但是,这只会告诉您 libc.so.6 内的偏移量,您还需要知道 libc.so.6 在其他系统上的加载位置。

    This answer可能对你有帮助。

    【讨论】:

      猜你喜欢
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      相关资源
      最近更新 更多