Как получить базовый адрес kernel процесса?
Мне нужно получить базовый адрес процесса ядра. Например, если вы используете dyld, то это делается с помощью _dyld_get_image_vmaddr_slide. Я написал код для получения порта задачи
#import <Foundation/Foundation.h>
#import <mach/mach.h>
#import <stdio.h>
#import <stdlib.h>
#import <mach/task_info.h>
#import <mach-o/dyld.h>
mach_port_t getTaskForPID(pid_t pid) {
mach_port_t task;
kern_return_t kr = task_for_pid(mach_task_self(), pid, &task);
if (kr == KERN_SUCCESS) {
return task;
}
return -1000032453;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
pid_t pid = getpid();
mach_port_t task = getTaskForPID(pid);
if (task != -1000032453) {
//need get base addres
} else {
NSLog(@"Не удалось получить task port. Ошибка");
}
}
return 0;
}
Я думал, что это можно сделать с помощью task_info
kern_return_t task_info(task_name_t target_task, task_flavor_t flavor, task_info_t task_info_out, mach_msg_type_number_t *task_info_outCnt);
Далее я понятия не имею, как реализовать получение базовых адресов, чтобы потом можно было прочитать значение офсета в запущенном процессе (например, приложении)
I need to get the base addresses of the kernel process. For example, if you use dyld, then this is done using _dyld_get_image_vmaddr_slide. I wrote the code for getting the task port
#import <Foundation/Foundation.h>
#import <mach/mach.h>
#import <stdio.h>
#import <stdlib.h>
#import <mach/task_info.h>
#import <mach-o/dyld.h>
mach_port_t getTaskForPID(pid_t pid) {
mach_port_t task;
kern_return_t kr = task_for_pid(mach_task_self(), pid, &task);
if (kr == KERN_SUCCESS) {
return task;
}
return -1000032453;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
pid_t pid = getpid();
mach_port_t task = getTaskForPID(pid);
if (task != -1000032453) {
//need get base addres
} else {
NSLog(@"Не удалось получить task port. Ошибка");
}
}
return 0;
}
I thought this could be done using task_info
kern_return_t task_info(task_name_t target_task, task_flavor_t flavor, task_info_t task_info_out, mach_msg_type_number_t *task_info_outCnt);
Next, I have no idea how to implement receiving base addres, so that later I can read the offset value in a running process (for example, an application)