已解决: 解决方案是调用personality(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
/proc/
,我认为您就陷入了困境。顺便说一句,我的想法可能是完全错误的!请参见这个。而且,ASLR是地址空间的进程范围属性,因此仅为一个特定的libfoo.so
更改它是没有任何意义的。 - Basile Starynkevitch