C - 从内存中读取和写入字节

时间:2016-08-27 22:19:43

标签: c function memory

我希望有一个可以从内存中读取字节的函数,而另一个函数可以这样写:

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));

可能已经有了这个功能,但是即使有了我自己更有兴趣自己编写它以了解它是如何完成的,那么我将如何编写这个函数。 感谢。

1 个答案:

答案 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