gpt4 book ai didi

c - 如何在 OS X 上获取另一个进程的 ASLR 幻灯片?

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:14 25 4
gpt4 key购买 nike

是否有可能在 OS X 上获取正在运行的进程的 ASLR 幻灯片?

我不想以某种方式禁用 ASLR(例如 gdb),而是获取偏移量。

例子:

$ cat > test.c
#include <stdio.h>

int test(void) {
return 42;
}

int main(void) {
getchar();
printf("%p: %d\n", test, test());
return 0;
}
$ gcc test.c -o test

多次运行测试将确认 test() 在每次运行时确实具有不同的地址:

$ ./test
^D
0x104493e50: 42
$ ./test
^D
0x106fe8e80: 42

注意:查找幻灯片的方法不应该搜索进程的内存或以其他方式检查它,因为我需要一个适用于所有可执行文件的可移植解决方案。

最佳答案

MachOView 的源代码中使用Attach.mm 中的函数find_main_binaryget_image_size ,如果你有进程的 pid 并且你有 root 权限,你可以获得进程的 ASLR 幻灯片:

pid_t pid = ...;

mach_vm_address_t main_address;
if(find_main_binary(pid, &main_address) != KERN_SUCCESS) {
printf("Failed to find address of header!\n");
return 1;
}

uint64_t aslr_slide;
if(get_image_size(main_address, pid, &aslr_slide) == -1) {
printf("Failed to find ASLR slide!\n");
return 1;
}

printf("ASLR slide: 0x%llx\n", aslr_slide);

我已将其制作成一个名为 get_aslr 的小实用程序.

关于c - 如何在 OS X 上获取另一个进程的 ASLR 幻灯片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18007614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com