首页
社区
课程
招聘
[求助]请教一个问题,linux下每次程序运行,system()的地址为什么老是改变?看一些资料上说这个地址不是应该是不变的么
发表于: 2017-12-27 09:49 4674

[求助]请教一个问题,linux下每次程序运行,system()的地址为什么老是改变?看一些资料上说这个地址不是应该是不变的么

2017-12-27 09:49
4674

如下:

程序

[admin@localhost ctf-kx_4_ta]$ cat vul2.c
#include <stdio.h>
#include <string.h>

void test(){
printf("test1\n");
}

main(int argc,char *argv[]){
char buf[6];
strcpy(buf,argv[1]);
test();
}
点击此处,编辑代码
执行结果:
[admin@localhost ctf-kx_4_ta]$ gdb -q ./vul2
Reading symbols from /home/songkun/ctf-kx_4_ta/vul2...done.
(gdb) b main
Breakpoint 1 at 0x80483f9: file vul2.c, line 10.
(gdb) r aaaa
Starting program: /home/admin/ctf-kx_4_ta/vul2 aaaa

Breakpoint 1, main (argc=2, argv=0xbfffeaf4) at vul2.c:10
10      strcpy(buf,argv[1]);
(gdb) p system
$1 = {<text variable, no debug info>} 0x4023a0 <system>
(gdb) c
Continuing.
test1

Program exited with code 06.
(gdb) r aaaa
Starting program: /home/admin/ctf-kx_4_ta/vul2 aaaa

Breakpoint 1, main (argc=2, argv=0xbfffeaf4) at vul2.c:10
10      strcpy(buf,argv[1]);
(gdb) p system
$2 = {<text variable, no debug info>} 0x2243a0 <system>
(gdb) c
Continuing.
test1

Program exited with code 06.
(gdb) quit
[admin@localhost ctf-kx_4_ta]$
点击此处,编辑代码
如上,第一次system的地址为0x4023a0,第二次system的地址为0x2243a0。关闭不关闭ASLR情况都是这样的。机器的环境是
[admin@localhost ctf-kx_4_ta]$ uname -a
Linux localhost.localdomain 2.6.18-194.17.1.el5 #1 SMP Mon Sep 20 07:16:16 EDT 2010 i686 i686 i386 GNU/Linux
[admin@localhost ctf-kx_4_ta]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.5 (Tikanga)




[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
cat  /proc/sys/kernel/randomize_va_space,看下是不是0,如果不是0,就执行echo  0  >  /proc/sys/kernel/randomize_va_space,然后再测试看看。
2017-12-28 13:49
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
因为你当前的系统开启了alsr内存地址随机化,所以每次的内存地址都是变化的,向楼上的说法关了就好了,关了的gdb调试的时候地址就是不变的了,但是gdb得到的也并不是真正的内存地址而是gdb环境下调试的地址,如果你需要查看真正的地址的话,需要自己设置core,gdb  调试core的信息,这样得出的地址才是真正的地址。
2017-12-29 14:59
0
雪    币: 837
活跃值: (355)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
关闭不关闭ASLR情况都是这样的啦。问这个问题的由来是想学习利用ret2plt进行栈溢出,参考的这篇文章536K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3L8r3W2F1P5i4c8Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0b7%4y4o6t1&6z5o6t1K6,发现做到获取system地址时,出现了标题中的问题,有哪些大大可以解释一下?多谢
2017-12-29 15:52
0
雪    币: 837
活跃值: (355)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
发现在Fedora  23  64位中是不变的,RHEL  5.5 32位 中是变的
2018-1-13 21:04
0
游客
登录 | 注册 方可回帖
返回