【发布时间】:2018-02-01 13:36:45
【问题描述】:
以下是我用来在 0x10000000 处写入无符号数据的代码。 程序已编译但运行失败。
void load_program(unsigned base_address){
char* IM=reinterpret_cast <char*>(base_address);
unsigned a=0;
*IM=a;
}
int main(int argc, char** argv) {
unsigned address=0x10000000;
load_program(address);
return 0;
}
【问题讨论】:
-
在具有受保护操作系统和虚拟内存的通用 PC 上,您不能只写入进程不拥有的随机地址。这导致undefined behavior。是什么让您认为该地址是写入字节的有效地址?
-
请指定您的平台(Linux、Windows、嵌入式处理器,...)。您实际上想要达到什么目的?或者为什么你觉得需要写地址 0x10000000?
-
"如何在特定的内存位置写入数据?" - 首先要确保该地址是可访问的。
-
您的代码可以在嵌入式系统上运行,前提是地址处有可写设备且没有操作系统。这是写入硬件设备寄存器和内存的技术。
标签: c++ c++11 pointers memory unsigned