我想要一个可以从内存读取字节的函数,另一个可以像这样写入:
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));
可能已经有一个函数可以实现此目的,但即使有,我也更有兴趣自己编写它,看看它是如何完成的,那么我将如何编写这个函数。 谢谢。
最佳答案
这不是“纯C”问题,因为C语言标准没有定义如何访问给定地址的物理、线性或虚拟内存。在许多或大多数环境中,操作系统永远不会让您直接访问物理内存,或者仅在您要求时才允许您访问物理内存。
例如,在具有帧缓冲区的 Linux 上,要访问帧缓冲区内存,您必须以写入模式打开
帧缓冲区设备,mmap
它来处理内存并从以下位置开始写入内存它被映射的地址。
在实模式或 v86 模式 DOS 下,您可以使用 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
关于C - 从内存中读取和写入字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39186294/