【发布时间】:2015-02-22 03:23:20
【问题描述】:
关于我之前关于显示特定数据地址的内容的问题,我现在尝试修改各个地址的内容。这似乎是一个足够简单的任务,但每次尝试时都会出现段错误。我正在使用以下功能:
int mem_set(Cmd *cp, char *arguments)
{
int address = 0, value = 0;
char *location;
if(sscanf(arguments, "%x %x", &address, &value) == 2)
{
location = (char*)address;
*location = value;
}
else printf("Invalid input.\n");
return 0;
}
我应该能够通过找到它的地址并将其替换为正确的十六进制值来将表中的项目(在这个文件中)从“s”更改为“x”,但是当我得到一个段错误时它到达*location = value;。有什么想法吗?
谢谢!
【问题讨论】:
-
我很困惑:你到底想改变什么?您是否尝试更改程序内存的内容?您是否要更改内存中表的内容?您是否尝试更改文件的内容?
-
我正在尝试更改 .c 文件中的内容,特别是命令表,以便“x”将调用退出函数,其命令当前为“s”。
-
当您说“
.c文件中的内容”时,您的意思是要更改正在运行的程序的一部分(因为当它运行时,它不再是.c 文件)? -
据说,我可以在程序运行时使用此命令来更改程序。问题的确切措辞是“在导师程序运行时将停止命令从's'更改为'x'”。 Tutor 是我正在运行的程序的名称,停止命令在一个名为 cmds.c 的文件中,该文件是程序所依赖的。抱歉,如果这没有太大帮助,我最近的(也是第一次)C 课程是两个学期前。
-
坏消息:你在解决这个问题的路上走错了路。大错特错。与其在运行时修改程序(这远远超出了您的技能水平......而且几乎一开始就不应该这样做......而且在某些平台上甚至是不可能的),而是尝试改变程序,以便停止命令的键存储在一个变量中,然后您可以在运行时修改该变量(而不是在运行时修改程序)。简短的回答:您正在以可以想象的最困难的方式解决一个非常简单的问题。
标签: c pointers memory segmentation-fault