是否可以从另一个翻译单元访问静态变量
Is it possible to access static variable from another translation unit?
a1.cpp
static int a = 20;
a2.cpp
#include <iostream>
extern int a;
int main() {
std::cout<<a<<std::endl; // link error
}
如果你不能修改a1.cpp,是否可以更改a2.cpp,使其可以访问a1.cpp中的a
?也许使用汇编?
-------编辑--------
万一有人感兴趣,我终于找到了一种方法:
a1.cpp
static int a = 20;
a2.cpp
int b = 100;
int main() {
int* p = &b;
p--;
*p = 42; // now a in a1.cpp is changed from 20 to 42, tested by clang++ 3.8.1
return 0;
}
我知道这不是static
的原因,只是想知道我们是否可以使用地址和偏移量来破解它。
如果变量是a1.cpp
中的static
,则只有a1.cpp
可以直接访问它,其他具有extern
的单元根本无法访问它。
程序集可以访问它,但如果您在运行时知道变量的内存地址,则只能。
通常,a1.cpp
必须将指向变量的指针传递给a2.cpp
(在这种情况下,不需要汇编(。但是,如果你不能改变a1.cpp
来做到这一点,那么你就很倒霉了,除非变量碰巧有一个你可以扫描内存的唯一值。不过,这种可能性不大。
相关文章:
- 通过方法访问结构
- 什么时候调用组成单元对象的析构函数
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 在单元测试项目中包括 .c 文件,并从多个 cpp 文件访问它而不会出现链接问题
- 索引和访问 mex 函数中单元数组和矩阵的元素
- Boost单元测试夹具继承测试类,是否可以访问受保护的方法
- 快速访问2D矩阵中的单元格
- 如何在单元测试中访问私有成员
- OO 中的单元测试和访问修饰符
- 非单元迭代器跨接非随机访问迭代器
- 访问私有变量的单元测试
- 是否可以从另一个翻译单元访问静态变量
- 缓存友好矩阵,用于访问相邻单元
- 如何将在一个类中声明的类的数据类型访问到另一个类(两者都在不同的翻译单元中)
- 一个翻译单元如何访问另一个翻译单元的全局作用域?