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

Does Android NDK support "-z execstack" flag?

我正在尝试用 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 RW 0x10 ...

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

已解决。

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