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
我正在尝试用 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