我正在尝试访问(char * addr)指向的内存位置并存储新值(char val)。这是我尝试的方法。

int set_new_val(Cmd *cp, char *arguments) {
  char *addr;
  int val;
  if (!sscanf(arguments, "%x %x",&addr,&val))
  {
    return 0;
  }
  printf("adr = %x || val = %x\n",addr,val);
  *addr = (char)val;
  printf("adr = %x || val = %x\n",addr,*addr);
  return 1;
}


任何明显(或不是这样)都不起作用的原因将不胜感激。

最佳答案

如果char*int的大小相同,则您的代码可能会按预期工作,这与32位模式下的情况相同,但在大多数现代64位环境中却不是。

在现代操作系统(Windows,Linux,OS / X,iOS,Android ...)中,您将面临的另一个问题是内存保护:您的进程只允许写入自己的数据。这样就不能将值仅戳到内存中的任何位置。使用适当的执行特权和mmap函数可以实现写入任意内存位置的功能,但这似乎超出了您当前的技能水平。

10-07 16:33
查看更多