我正在尝试访问(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
函数可以实现对任意内存位置的写入,但它似乎远远超出了您当前的技能水平。
在为其分配值之前,首先需要为addr
分配内存:
addr = malloc(sizeof(val));
*addr = (char)val;