是否可以在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源代码中的find_main_binary
和get_image_size
fromAttach.mm
函数,如果您具有进程的pid并且您具有如下的根权限,则可以获得该进程的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/