更改变量的地址

时间:2011-08-25 18:04:49

标签: c

有没有办法将绝对地址0x67a9的整数变量设置为该值 0xaa55?编译器是纯ANSI编译器。

如何做到这一点?

这是一个与嵌入式系统相关的程序。在那里,我们可以访问特定的内存位置。

3 个答案:

答案 0 :(得分:10)

试试这个:

*((int*)0x67a9) = 0xaa55;

答案 1 :(得分:5)

int *ptr = (int *) 0x67a9;
*ptr = 0xaa55;  // MBR signature ?

修改

不能更改变量的地址,你只能用指针指向某个地址,如上所示。

答案 2 :(得分:0)

取决于编译器的编译方式。

-如果在编译时将变量的每个实例解码为最终地址,则将无法更改常规变量的地址。

-如果在编译时将变量的每个实例解码,以引用查找表中的某个点作为其地址,则这是可能的,尽管您最好确保将其设置为的地址已分配。

例如,假设变量A的“查找”地址为0x1000,在0x1000处找到的值为0x2000,因此A的内容为0x2000。要更改A的地址,只需更改0x1000的值即可。将0x1000的值设置为0x3000,然后A的内容为0x3000。

是的,这就是指针的工作方式,但是在后台编译器可能会对其进行相同的处理(常规变量只是被自动取消引用的指针。)当然,您也可以仅使所有变量指针准备好自己,以便在代码中进行大量取消引用。