#include <stdio.h>
// 定义一个宏来间接访问全局变量
#define ACCESS_GLOBAL_VARIABLE (*(int*)0x12345678)
// 全局整型变量,地址假设为0x12345678
int global_variable __attribute__((section(".data"), aligned(4))) __attribute__((address("0x12345678")));
// 函数来修改全局变量的值
void modify_global_variable(int new_value) {
ACCESS_GLOBAL_VARIABLE = new_value;
}
int main() {
// 初始化全局变量
global_variable = 10;
printf("初始值: %d\n", global_variable);
modify_global_variable(20);
printf("修改后的值: %d\n", global_variable);
return 0;
}
混淆原理说明
- 宏定义:通过定义宏
ACCESS_GLOBAL_VARIABLE
,使用指针间接访问全局变量,使得变量的直接访问不直观。宏定义在预处理阶段进行替换,将原本直接访问变量的代码替换为通过指针间接访问的形式。
- 指定变量地址:使用
__attribute__((address("0x12345678")))
来指定 global_variable
的地址,这样在宏定义中使用这个特定地址进行指针间接访问。这种方式使得变量的物理存储位置与访问方式紧密关联,增加了理解难度。
- 函数封装:将对全局变量的修改操作封装在
modify_global_variable
函数中,调用者只需要知道传入新值来修改变量,而不需要了解具体的访问细节,进一步隐藏了变量访问的实现。