看雪论坛
发新帖

[讨论]ndk编译的arm程序,程序空间怎么在0xb6f5b000这样的高地址,地址比libc还要后

lujuzhi 2017-3-20 22:07 433

2017.3.21 11:19  更新

我的疑问源于内存的布局一般是下面这样的

程序的text,data,bss段等 都快要接近栈了,地址比libc还要后

blob.png


-----------------------------------------------------------------------------------------------------------

我是跟着蒸米哥那个rop学习的时候遇到的,我没直接用蒸米的程序,而是自己编译一下

学习链接:http://wooyun.tangscan.cn/static/drops/papers-11390.html

编译环境:

使用安卓6.0sdk,ndk r10b

编译过程:

1.创建项目
android create project -n level6 -p level6 -t android-23 -k com.test.level6 -a MyActivity
2.之后在项目根目录建立jni文件夹
将.c和Android.mk和Application.mk放进去
3.回到项目根目录执行ndk-build

那两个文件内容如下

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := level6
LOCAL_SRC_FILES := level6.c
include $(BUILD_EXECUTABLE)

Application.mk(关闭gs)

APP_ABI := armeabi
APP_CFLAGS += -fno-stack-protector

 

如下图,而且每次运行的地址还会变, 这算是PIE咯

当然假如用蒸米哥的程序就不会了

本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (3)
1
金罡 2017-3-21 00:38
2
32位linux应用地址空间是3G,内核的1G。
lujuzhi 2017-3-21 11:28
3

金罡 32位linux应用地址空间是3G,内核的1G。

额,没表达清楚,我的意思是我们程序的text,data,bss段等 都快要接近栈了,而且比libc的地址还要大

xWeiwei 2017-3-22 22:55
4
蒸米那个在编译的时候没有开启PIE选项,映射地址是固定的。 你编译的文件开启了PIE吧,所以二进制加载的地址在一定范围内随机。
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 知道创宇带宽支持 | 微信公众号:ikanxue
Time: 0.012, SQL: 9 / 京ICP备10040895号-17