解决了:
解决方案是调用个性(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

最佳答案



您不能(而且ASLR不在ELF文件中的任何位置,因为它不是ELF的属性,而是内核的属性)。

您可以做的是为给定进程禁用随机化。 setarch -Ryour friend

10-08 08:43