我有以下代码:
struct str {
int a;
int b;
};
extern struct str c;
在汇编中(使用GNU as),我可以设置c
的内存位置,如下所示:
.global c
.set c, 0x12345678
有没有办法可以在C中移植?这段代码适用于微控制器,因此我不认为这是一种“不良做法”。
答案 0 :(得分:2)
是和否。您可以使用基本上任何编译器编写应该编译的代码。之后发生的事情将取决于。
struct str *c = (struct str *)0x12345678;
正如我所说的那样,这几乎应该用任何编译器进行编译(尽管如果您使用的数字是编译器不认为可以转换为地址的数字,它可能会被拒绝)。当您尝试取消引用时,指针将取决于编译器如何将其转换为实际地址(变化,但意图是某人知道机器的寻址所期望的)以及它生成的地址是否是您实际拥有的地址访问(如果是,请确切访问您的访问权限。)