设置静态分配对象的内存位置

时间:2013-02-09 19:37:50

标签: c memory-management assembly

我有以下代码:

struct str {
    int a;
    int b;
};

extern struct str c;

在汇编中(使用GNU as),我可以设置c的内存位置,如下所示:

.global c
.set c, 0x12345678

有没有办法可以在C中移植?这段代码适用于微控制器,因此我不认为这是一种“不良做法”。

1 个答案:

答案 0 :(得分:2)

是和否。您可以使用基本上任何编译器编写应该编译的代码。之后发生的事情将取决于。

 struct str *c = (struct str *)0x12345678;

正如我所说的那样,这几乎应该用任何编译器进行编译(尽管如果您使用的数字是编译器不认为可以转换为地址的数字,它可能会被拒绝)。当您尝试取消引用时,指针将取决于编译器如何将其转换为实际地址(变化,但意图是某人知道机器的寻址所期望的)以及它生成的地址是否是您实际拥有的地址访问(如果是,请确切访问您的访问权限。)