Android NDK是否支持“ -z execstack”标志?

时间:2019-07-11 12:31:37

标签: android android-ndk

我正在尝试使用android ndk构建可执行文件以测试shellcode。我设置了'LOCAL_CFLAGS:= -z execstack'以使堆栈可执行,但是它不起作用。 android ndk不支持'-z execstack'选项吗?

代码如下:

18个包含$(CLEAR_VARS)
 19 LOCAL_MODULE:= shellcode-test
 20 LOCAL_SRC_FILES:= src / shellcode-test.c
 21 LOCAL_CFLAGS:= -z execstack -Wl,-execstack

检查结果:仅'RW',无'E'

$ aarch64-linux-gnu-readelf -l shellcode-test ... GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000                  0x0000000000000000 0x0000000000000000读写0x10 ...

2 个答案:

答案 0 :(得分:0)

即使您使代码可以使用可执行堆栈进行编译,平台也不会将其作为可执行文件加载。可执行堆栈具有很大的安全风险。

答案 1 :(得分:0)

已解决。

Android NDK在构建可执行文件或库时强制使用noexecstack选项。因此,Android.mk中的“ -z execstack”被NDK的默认选项覆盖:

./build/core/build-binary.mk:LOCAL_CFLAGS += -Wa,--noexecstack ./build/core/build-binary.mk:LOCAL_LDFLAGS += -Wl,-z,noexecstack