Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 启用ASLR后,是否每次都以相对于图像基址的相同偏移量加载图像的所有部分?_C++_C_Linux_X86 64_Aslr - Fatal编程技术网

C++ 启用ASLR后,是否每次都以相对于图像基址的相同偏移量加载图像的所有部分?

C++ 启用ASLR后,是否每次都以相对于图像基址的相同偏移量加载图像的所有部分?,c++,c,linux,x86-64,aslr,C++,C,Linux,X86 64,Aslr,libc的不同部分(例如.text,.plt,.got,.bss,.rodata和其他部分)是否每次都以相对于libc基地址的相同偏移量加载 我知道每次我运行程序时,加载程序都会在随机位置加载libc 提前谢谢。我想我找到了我自己问题的答案。我使用英特尔管脚编写了一个管脚工具,在每个libc节上,get-load输出相对于libc地址的节偏移量。以下是以相同偏移量加载的节及其相应的偏移量(前面的-是库名,即libc及其版本,后面的是节名): 事实上,每次都有不同偏移量的部分被加载。你可以在下面看

libc
的不同部分(例如
.text
.plt
.got
.bss
.rodata
和其他部分)是否每次都以相对于
libc
基地址的相同偏移量加载

我知道每次我运行程序时,加载程序都会在随机位置加载libc


提前谢谢。

我想我找到了我自己问题的答案。我使用英特尔管脚编写了一个管脚工具,在每个
libc
节上,get-load输出相对于
libc
地址的节偏移量。以下是以相同偏移量加载的节及其相应的偏移量(前面的
-
是库名,即
libc
及其版本,后面的是节名):

事实上,每次都有不同偏移量的部分被加载。你可以在下面看到它们。然而,由于我不认识它们,对我来说也不重要,我想得出结论,是的,我们最关心的部分在每次程序运行时都以相同的偏移量加载

libc.so.6-.note.stapsdt                  
libc.so.6-.gnu.warning.sigstack          
libc.so.6-.gnu.warning.sigreturn         
libc.so.6-.gnu.warning.siggetmask        
libc.so.6-.gnu.warning.tmpnam            
libc.so.6-.gnu.warning.tmpnam_r          
libc.so.6-.gnu.warning.tempnam           
libc.so.6-.gnu.warning.sys_errlist       
libc.so.6-.gnu.warning.sys_nerr          
libc.so.6-.gnu.warning.gets              
libc.so.6-.gnu.warning.getpw             
libc.so.6-.gnu.warning.re_max_failures   
libc.so.6-.gnu.warning.lchmod            
libc.so.6-.gnu.warning.getwd             
libc.so.6-.gnu.warning.sstk              
libc.so.6-.gnu.warning.revoke            
libc.so.6-.gnu.warning.mktemp            
libc.so.6-.gnu.warning.gtty              
libc.so.6-.gnu.warning.stty              
libc.so.6-.gnu.warning.chflags           
libc.so.6-.gnu.warning.fchflags          
libc.so.6-.gnu.warning.__compat_bdflush  
libc.so.6-.gnu.warning.__memset_zero_constant_len_parameter
libc.so.6-.gnu.warning.__gets_chk        
libc.so.6-.gnu.warning.inet6_option_space 
libc.so.6-.gnu.warning.inet6_option_init 
libc.so.6-.gnu.warning.inet6_option_append 
libc.so.6-.gnu.warning.inet6_option_alloc 
libc.so.6-.gnu.warning.inet6_option_next 
libc.so.6-.gnu.warning.inet6_option_find 
libc.so.6-.gnu.warning.getmsg            
libc.so.6-.gnu.warning.putmsg            
libc.so.6-.gnu.warning.fattach           
libc.so.6-.gnu.warning.fdetach           
libc.so.6-.gnu.warning.setlogin          
libc.so.6-.gnu_debuglink                 
libc.so.6-.shstrtab                      

您是否测试过它,可能是通过多次运行
cat/proc/self/maps
?是的,我尝试过,但是
/proc/self/maps
只显示图像的基本地址,而不显示它们的部分。我可以找到加载
libc
ld
的位置,但我仍然有一个问题,即它们的部分是否每次都以相同的偏移量加载。这可能取决于您使用的编译器/链接器/操作系统组合。如果指定了它(无论是在规范中,还是在编译器手册中),最好有一个链接。我想你是对的。我在
64位Ubuntu Linux
中使用了
gcc
。如果其他人尝试了其他编译器或链接器,并且得到了不同的答案,请同时发布您的答案。除非受到规范的限制,否则在不同版本的
gcc
之间很可能会有所不同,特别是在考虑真正的旧版本时。IDK,不过:我通常会尽量远离C!;-)@jpaugh:为了使BSS和数据段中静态数据的RIP相对寻址能够在没有文本重新定位的情况下工作,它们必须映射到与文本段相同的相对地址。ELF对象作为一个整体是ASLRed的,而不是相对于彼此的各个片段。RIP相对寻址的最大好处之一是PIC代码,它不需要使用GOT来处理所有事情,并且在加载后也不需要重新定位修正,因此,是的,您可以确定这就是它的工作原理;你确定他们被映射了,你在为他们计算一些合理的东西吗?(.)
libc.so.6-.note.stapsdt                  
libc.so.6-.gnu.warning.sigstack          
libc.so.6-.gnu.warning.sigreturn         
libc.so.6-.gnu.warning.siggetmask        
libc.so.6-.gnu.warning.tmpnam            
libc.so.6-.gnu.warning.tmpnam_r          
libc.so.6-.gnu.warning.tempnam           
libc.so.6-.gnu.warning.sys_errlist       
libc.so.6-.gnu.warning.sys_nerr          
libc.so.6-.gnu.warning.gets              
libc.so.6-.gnu.warning.getpw             
libc.so.6-.gnu.warning.re_max_failures   
libc.so.6-.gnu.warning.lchmod            
libc.so.6-.gnu.warning.getwd             
libc.so.6-.gnu.warning.sstk              
libc.so.6-.gnu.warning.revoke            
libc.so.6-.gnu.warning.mktemp            
libc.so.6-.gnu.warning.gtty              
libc.so.6-.gnu.warning.stty              
libc.so.6-.gnu.warning.chflags           
libc.so.6-.gnu.warning.fchflags          
libc.so.6-.gnu.warning.__compat_bdflush  
libc.so.6-.gnu.warning.__memset_zero_constant_len_parameter
libc.so.6-.gnu.warning.__gets_chk        
libc.so.6-.gnu.warning.inet6_option_space 
libc.so.6-.gnu.warning.inet6_option_init 
libc.so.6-.gnu.warning.inet6_option_append 
libc.so.6-.gnu.warning.inet6_option_alloc 
libc.so.6-.gnu.warning.inet6_option_next 
libc.so.6-.gnu.warning.inet6_option_find 
libc.so.6-.gnu.warning.getmsg            
libc.so.6-.gnu.warning.putmsg            
libc.so.6-.gnu.warning.fattach           
libc.so.6-.gnu.warning.fdetach           
libc.so.6-.gnu.warning.setlogin          
libc.so.6-.gnu_debuglink                 
libc.so.6-.shstrtab