我在 C 中有以下代码:
int addInt(int n, int m) {
return n + m;
}
int (*functionPtr)(int, int);
functionPtr = &addInt;
functionPtr是一个函数指针,它指向函数addInt的特定地址。我想更改其值的 1 位,但我无法弄清楚如何。
假设functionPtr在最后一条语句之后指向0xABC0(假设是 16 位地址)。我想将其值更改为0xABC1。我试图用 0x1 对值进行 OR 运算,但我猜操作数转换有问题:
functionPtr = &addInt | 0x00000001; // addresses are of 32 bits
我知道搞乱指针是有风险的,但我必须更改地址的 LSB 才能进入 ARM Cortex-M4 MCU 的 Thumb 状态。