1

我有以下代码:

struct str {
    int a;
    int b;
};

extern struct str c;

在汇编中(使用 GNU as),我可以像这样设置内存位置c

.global c
.set c, 0x12345678

有没有办法在 C 中便携地做到这一点?此代码适用于微控制器,因此我不认为这是“不好的做法”。

4

1 回答 1

2

是和不是。您可以编写基本上可以使用任何编译器编译的代码。之后会发生什么将取决于。

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

正如我所说,几乎任何编译器都应该编译这么多(尽管如果您使用的数字是编译器认为不能转换为地址的数字,它可能会被拒绝)。当您尝试取消引用指针时,将取决于编译器如何将其转换为实际地址(有所不同,但旨在成为知道机器寻址的人所期望的)以及它生成的地址是否是您实际拥有的地址访问权限(如果是,您究竟拥有什么访问权限)。

于 2013-02-09T19:46:37.063 回答