有没有办法将绝对地址0x67a9
的整数变量设置为该值
0xaa55
?编译器是纯ANSI编译器。
如何做到这一点?
这是一个与嵌入式系统相关的程序。在那里,我们可以访问特定的内存位置。
答案 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。
是的,这就是指针的工作方式,但是在后台编译器可能会对其进行相同的处理(常规变量只是被自动取消引用的指针。)当然,您也可以仅使所有变量指针准备好自己,以便在代码中进行大量取消引用。