我正在尝试访问(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
函数可以实现写入任意内存位置的功能,但这似乎超出了您当前的技能水平。