C++中的交换内存
swap memory in C++
我正在尝试交换堆栈上的一些寄存器值。例如L0,L1...L10 应变为 L10,L9,..L0。这些寄存器值存储在缓冲区“target_types::buf”中。
void reverse_local_regs(int size, int offset)
{
const int BYTES_PER_REGISTER = 4;
uint8_t temp_reg[BYTES_PER_REGISTER];
for (int i = 0; i < size; i += BYTES_PER_REGISTER)
{
memcpy(temp_reg, &target_types::buf[offset + i], BYTES_PER_REGISTER);
memcpy(&target_types::buf[offset + i], &target_types::buf[offset + size - i - 4], BYTES_PER_REGISTER);
memcpy(&target_types::buf[offset + size - i - 4], temp_reg, BYTES_PER_REGISTER);
}
}
我写了这个函数,但它根本没有改变内存。为了验证内存是否保持不变,我编写了以下打印“Same mem”的代码。
uint8_t test[2048];
memcpy(test, target_types::buf, 2048);
reverse_local_regs(BYTES_PER_REGISTER * FL, FP_SR_PC_offset);
if (memcmp(test, target_types::buf, 2048) == 0)
std::cout << "Same mem" << std::endl;
else
std::cout << "different mem" << std::endl;
我做错了什么?
我认为它需要括号
迭代器 i
也应该停在一半 size
否则下半场换回来
void reverse_local_regs(int size, int offset)
{
const int BYTES_PER_REGISTER = 4;
uint8_t temp_reg[BYTES_PER_REGISTER];
for (int i = 0; i < size/2; i += BYTES_PER_REGISTER)
{
memcpy(temp_reg, &target_types::buf[offset + i], BYTES_PER_REGISTER);
memcpy(&target_types::buf[offset + i], &target_types::buf[offset + (size - (i + 4))], BYTES_PER_REGISTER);
memcpy(&target_types::buf[offset + (size - (i + 4))], temp_reg, BYTES_PER_REGISTER);
}
}
我正在尝试交换堆栈上的一些寄存器值。例如L0,L1...L10 应变为 L10,L9,..L0。这些寄存器值存储在缓冲区“target_types::buf”中。
void reverse_local_regs(int size, int offset)
{
const int BYTES_PER_REGISTER = 4;
uint8_t temp_reg[BYTES_PER_REGISTER];
for (int i = 0; i < size; i += BYTES_PER_REGISTER)
{
memcpy(temp_reg, &target_types::buf[offset + i], BYTES_PER_REGISTER);
memcpy(&target_types::buf[offset + i], &target_types::buf[offset + size - i - 4], BYTES_PER_REGISTER);
memcpy(&target_types::buf[offset + size - i - 4], temp_reg, BYTES_PER_REGISTER);
}
}
我写了这个函数,但它根本没有改变内存。为了验证内存是否保持不变,我编写了以下打印“Same mem”的代码。
uint8_t test[2048];
memcpy(test, target_types::buf, 2048);
reverse_local_regs(BYTES_PER_REGISTER * FL, FP_SR_PC_offset);
if (memcmp(test, target_types::buf, 2048) == 0)
std::cout << "Same mem" << std::endl;
else
std::cout << "different mem" << std::endl;
我做错了什么?
我认为它需要括号
迭代器 i
也应该停在一半 size
否则下半场换回来
void reverse_local_regs(int size, int offset)
{
const int BYTES_PER_REGISTER = 4;
uint8_t temp_reg[BYTES_PER_REGISTER];
for (int i = 0; i < size/2; i += BYTES_PER_REGISTER)
{
memcpy(temp_reg, &target_types::buf[offset + i], BYTES_PER_REGISTER);
memcpy(&target_types::buf[offset + i], &target_types::buf[offset + (size - (i + 4))], BYTES_PER_REGISTER);
memcpy(&target_types::buf[offset + (size - (i + 4))], temp_reg, BYTES_PER_REGISTER);
}
}