#include <iostream>
#include <cstring>
#include <iomanip>
// 打印内存内容的工具函数
void hexdump(const void* addr, size_t len) {
const uint8_t* p = static_cast<const uint8_t*>(addr);
std::cout << "Address | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n";
std::cout << "---------|------------------------------------------------\n";
for (size_t i = 0; i < len; i += 16) {
std::cout << reinterpret_cast<const void*>(p + i) << " | ";
for (int j = 0; j < 16 && (i + j) < len; ++j) {
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(p[i + j]) << " ";
}
std::cout << "\n";
}
}
int main() {
// 分配两个连续的 8 字节块(0x00~0x07 和 0x08~0x0F)
alignas(8) struct {
uint8_t block1[8]; // 地址 0x00~0x07
uint8_t block2[8]; // 地址 0x08~0x0F
} memory;
// 染色内存块
memset(memory.block1, 0xAA, sizeof(memory.block1)); // 块1: 全 0xAA
memset(memory.block2, 0xBB, sizeof(memory.block2)); // 块2: 全 0xBB
std::cout << "=== 初始内存状态 ===\n";
hexdump(&memory, 16);
// 强制在地址 0x06 写入 int64_t(跨 block1 和 block2)
volatile int64_t* unaligned_ptr = reinterpret_cast<int64_t*>(
reinterpret_cast<uint8_t*>(&memory) + 6
);
*unaligned_ptr = 0x1122334455667788; // 写入测试值
std::cout << "\n=== 写入后的内存状态 ===\n";
hexdump(&memory, 16);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGlvbWFuaXA+CgovLyDmiZPljbDlhoXlrZjlhoXlrrnnmoTlt6Xlhbflh73mlbAKdm9pZCBoZXhkdW1wKGNvbnN0IHZvaWQqIGFkZHIsIHNpemVfdCBsZW4pIHsKICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYWRkcik7CiAgICBzdGQ6OmNvdXQgPDwgIkFkZHJlc3MgIHwgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMDggMDkgMEEgMEIgMEMgMEQgMEUgMEZcbiI7CiAgICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgaSArPSAxNikgewogICAgICAgIHN0ZDo6Y291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihwICsgaSkgPDwgIiB8ICI7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxNiAmJiAoaSArIGopIDwgbGVuOyArK2opIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6aGV4IDw8IHN0ZDo6c2V0dygyKSA8PCBzdGQ6OnNldGZpbGwoJzAnKSAKICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PGludD4ocFtpICsgal0pIDw8ICIgIjsKICAgICAgICB9CiAgICAgICAgc3RkOjpjb3V0IDw8ICJcbiI7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy8g5YiG6YWN5Lik5Liq6L+e57ut55qEIDgg5a2X6IqC5Z2X77yIMHgwMH4weDA3IOWSjCAweDA4fjB4MEbvvIkKICAgIGFsaWduYXMoOCkgc3RydWN0IHsKICAgICAgICB1aW50OF90IGJsb2NrMVs4XTsgIC8vIOWcsOWdgCAweDAwfjB4MDcKICAgICAgICB1aW50OF90IGJsb2NrMls4XTsgICAvLyDlnLDlnYAgMHgwOH4weDBGCiAgICB9IG1lbW9yeTsKCiAgICAvLyDmn5PoibLlhoXlrZjlnZcKICAgIG1lbXNldChtZW1vcnkuYmxvY2sxLCAweEFBLCBzaXplb2YobWVtb3J5LmJsb2NrMSkpOyAvLyDlnZcxOiDlhaggMHhBQQogICAgbWVtc2V0KG1lbW9yeS5ibG9jazIsIDB4QkIsIHNpemVvZihtZW1vcnkuYmxvY2syKSk7IC8vIOWdlzI6IOWFqCAweEJCCgogICAgc3RkOjpjb3V0IDw8ICI9PT0g5Yid5aeL5YaF5a2Y54q25oCBID09PVxuIjsKICAgIGhleGR1bXAoJm1lbW9yeSwgMTYpOwoKICAgIC8vIOW8uuWItuWcqOWcsOWdgCAweDA2IOWGmeWFpSBpbnQ2NF9077yI6LeoIGJsb2NrMSDlkowgYmxvY2sy77yJCiAgICB2b2xhdGlsZSBpbnQ2NF90KiB1bmFsaWduZWRfcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Kj4oCiAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJm1lbW9yeSkgKyA2CiAgICApOwogICAgKnVuYWxpZ25lZF9wdHIgPSAweDExMjIzMzQ0NTU2Njc3ODg7IC8vIOWGmeWFpea1i+ivleWAvAoKICAgIHN0ZDo6Y291dCA8PCAiXG49PT0g5YaZ5YWl5ZCO55qE5YaF5a2Y54q25oCBID09PVxuIjsKICAgIGhleGR1bXAoJm1lbW9yeSwgMTYpOwoKICAgIHJldHVybiAwOwp9