我正在尝试使用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 ...
答案 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