已解决: 解决方案是调用个性(0x40000)。请参阅下面的评论中的详细信息。
ASLR 标志位于 ELF 文件中的什么位置?我需要为特定库 (.so) 禁用 ASLR。我试过使用 objdump,但我不知道怎么做。
我不能使用 /proc 因为它似乎不适用于我的 Android 4.4.4,所以我正在尝试修改二进制文件。
编辑: 我编译了以下内容:
#include <stdio.h>
void* getEIP()
{
return __builtin_return_address(0) - 0x5;
}
int main(int argc, char** argv)
{
printf("EIP located at: %p\n", getEIP());
return 0;
}
没有 ASLR (PIE):
arm-linux-androideabi-gcc.exe code.c -o noPIE --sysroot=%NDK%\platforms\android-3\arch-arm
使用 ASLR (PIE):
arm-linux-androideabi-gcc.exe -fPIE -pie code.c -o withPIE --sysroot=%NDK%\platforms\android-3\arch-arm
noPIE 二进制文件确实没有被随机化,即使:
# cat /proc/sys/kernel/randomize_va_space
2