我希望有一个可以从内存中读取字节的函数,而另一个函数可以这样写:
void write_memory(uint32 segment, uint32 offset, char ch);
write_memory(0x750F, 0x00AE, 16);
int read_memory(uint32 segment, uint32 offset);
printf("%d", read_memory(0x750F, 0x00AE));
可能已经有了这个功能,但是即使有了我自己更有兴趣自己编写它以了解它是如何完成的,那么我将如何编写这个函数。 感谢。
答案 0 :(得分:0)
这不是“纯C”问题,因为C语言标准没有定义如何在给定地址访问物理,线性或虚拟内存。在许多或大多数环境中,操作系统永远不会让您直接访问物理内存,或者只有在您提出要求时才能访问物理内存。
例如在带有帧缓冲的Linux上,要访问帧缓冲内存,必须在写入模式下open
帧缓冲设备,mmap
它处理内存并从映射到的地址开始写入内存。
在实模式或v86模式下,您可以使用FAR指针直接访问视频内存。在使用DPMI的保护模式下,DPMI提供了访问物理内存的方法。
以下是Turbo / Borland C ++,Microsoft C和DJGPP的示例:
#include <dos.h>
...
#if defined(__TURBOC__)
*(unsigned char far*)MK_FP(0xa000, i) = c;
#elif defined(_MSC_VER)
*(unsigned char far*)(0xa0000000ul + i) = c;
#elif defined(__DJGPP__) // program is running under DPMI
dosmemput(&c, 1, 0xa0000 + i);
#endif