gpt4 book ai didi

c - vm_write 返回 (os/kern) 无效地址

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:48 28 4
gpt4 key购买 nike

我已经完成了自签名代码协同设计——但不确定为什么 vm_write 会失败。(我使用的是 10.6.6)

试图找出使它工作所缺少的东西——我感谢对这个问题的一些帮助。

#include <mach/vm_map.h>
#include <mach/mach_traps.h>
#include <mach/mach_error.h>

int main (int argc, const char * argv[])
{

//get the task for PID
kern_return_t err;
int pid = 73002; // PID of process in the system
mach_port_name_t t;


err = task_for_pid(mach_task_self(), pid, &t);


if(0 != err)
{
printf("task_for_pid : %s",mach_error_string(err));
}

vm_address_t address;
vm_size_t size = 108;

err = vm_allocate(t,&address,size,TRUE);

if(0 != err)
{
printf("vm_allocate : %s",mach_error_string(err));
}

vm_offset_t data = pid;
mach_msg_type_number_t dataCnt = sizeof(pid);

err = vm_write(t,address,data,dataCnt);

if(0 != err)
{
printf("vm_write : %s",mach_error_string(err));
}


return 0;
}

更新:

  1. self signed code codesign --- 我已经在系统中生成证书并用于codesign。

  2. vm_write 返回 (os/kern) 无效地址(返回值为“1”)

最佳答案

您应该使用最新的 mach_vm_address_t、mach_vm_size_t、mach_vm_allocate、mach_vm_offset_t、mach_vm_write() 等。据我记得的经验,较旧的 API 在 64 位上工作得不是特别好进程(在 10.6 上可能非常相关)。此外,使用 pid_t 而不是 int 作为进程 ID。

另一位发帖人是正确的,您错误地将第三个参数传递给了 vm_write,也许您想传递 &data,但顺便说一句,您应该使用 mach_vm_write。我希望您的程序崩溃或尝试使用您使用 vm_write 的方式写入垃圾,但返回的错误似乎是 KERN_INVALID_ADDRESS,这表明它无法写入进程中的内存地址。

如果 task_for_pid 返回时没有错误,我认为您正确地签署了代码。您还应该在适当的地方使用常量 KERN_SUCCESS,而不是 0。

关于c - vm_write 返回 (os/kern) 无效地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6937665/

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