ASLR是否启用了libc随机函数地址?

时间:2018-12-06 04:34:58

标签: linux gdb aslr

这是有关ASLR的基本问题

如果我有一个未启用ASLR的二进制文件。但是,它使用的libc文件启用了ASLR,那么libc文件中system()的地址是否每次都会随机化?

还是因为主二进制文件本身未启用ASLR而每次使地址相同?

在gdb中,我正在获取system()函数的地址,如下所示:

 (gdb) break main
 (gdb) run
 (gdb) print &system

那么,这是从libc还是主二进制文件的PLT返回system()的地址?

此外,如果我有另一个系统的libc文件,那么如何找到其中的system()地址?通过defaut,如果我在主二进制文件上运行gdb,它将在本地系统上找到libc的system()地址。我是否必须告诉gdb加载libc文件(从远程系统获取)?

1 个答案:

答案 0 :(得分:1)

  

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

是(假设您尚未通过其他方式禁用ASLR)。请注意,默认情况下,GDB禁用ASLR。如果要在GDB下运行程序时观察ASLR的影响,则需要set disable-randomization off

  

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

那很容易:nm libc.so.6 | grep ' system'。但是,这仅告诉您偏移量 {{1}之内,您还需要知道libc.so.6在另一个系统上的加载位置。

This answer可能对您有所帮助。