问一下C语言可以使用另一个程序中的变量吗?例如本人在程序1中使用指针分配了内存,现在本人想打开程序2,输入程序1中这个指针的地址,然后在程序2中操作程序1中这个指针里的数据,可以吗?
解决方案
2
题主需要了解一下进程、虚拟地址空间的概念。
3
这分几种情况
1)共享内存。不分彼此都可以用
2)古老的DOS 实模式。可以直接用 指针操作
3)Window 及其他现在操作系统
Window 提供了远程内存读写函数,可以操作别的程序的内存
4)另外,几乎全部调试器,都可以读写所加载程序的内存。
也许还有更多
,例如通过驱动程序,操作别的程序的内存
另外,远程控制系统,可以通过网络连接,
控制另一台计算机进行任何操作,读写内存更不在话下了
1)共享内存。不分彼此都可以用
2)古老的DOS 实模式。可以直接用 指针操作
3)Window 及其他现在操作系统
Window 提供了远程内存读写函数,可以操作别的程序的内存
4)另外,几乎全部调试器,都可以读写所加载程序的内存。
也许还有更多
,例如通过驱动程序,操作别的程序的内存
另外,远程控制系统,可以通过网络连接,
控制另一台计算机进行任何操作,读写内存更不在话下了
4
打印出来的地址值是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(原因是实模式没有分段或分页机制,Cpu不进行自动地址转换)
WriteProessMemory
WriteProessMemory
2
可以看看windows编程之类的书籍。
4
进程通信问题 操作系统相关书籍有介绍
3
不是啊,只是用一些API而已,
通过变量名操作,只有共享内存也许还可以
其他的,都是通过API。
甚至驱动 对特定内存进行操作
一个程序的内存,另一个程序是能够操作的,
只是不能很直接操作而已,
原因是每个程序的虚拟空间是自成一体的
操作系统对进程的空间作了隔离处理
因此需要特殊手段,来操作另一个程序的内存空间
一般来说1)
需要暂停(挂起) 被操作的程序中,影响到某个内存的线程
这样,就不会原因是程序运行。导致数据不停的变来变去
2)需要从外部定位,读写这个程序的内存,
操作系统提供了API来解决这个问题
3
ReadProcessMemory
The ReadProcessMemory function reads memory in a specified process. The entire area to be read must be accessible, or the operation fails.
BOOL ReadProcessMemory(
HANDLE hProcess, // handle to the process whose memory is read
LPCVOID lpBaseAddress,
// address to start reading
LPVOID lpBuffer, // address of buffer to place read data
DWORD nSize, // number of bytes to read
LPDWORD lpNumberOfBytesRead
// address of number of bytes read
);
The ReadProcessMemory function reads memory in a specified process. The entire area to be read must be accessible, or the operation fails.
BOOL ReadProcessMemory(
HANDLE hProcess, // handle to the process whose memory is read
LPCVOID lpBaseAddress,
// address to start reading
LPVOID lpBuffer, // address of buffer to place read data
DWORD nSize, // number of bytes to read
LPDWORD lpNumberOfBytesRead
// address of number of bytes read
);
3
题主需要了解一下进程、虚拟地址空间的概念。
问一下从哪里了解?
百度一下就可以了解了,假如想系统学习,需要看《操作系统》书,操作系统是计算机专业的必修课。