Code Bye

问一下C语言可以使用另一个程序中的变量吗?例如本人在程序1中使用指针分配了内存,现在本人想打开程序2,输入程序

问一下C语言可以使用另一个程序中的变量吗?例如本人在程序1中使用指针分配了内存,现在本人想打开程序2,输入程序1中这个指针的地址,然后在程序2中操作程序1中这个指针里的数据,可以吗?
解决方案

2

题主需要了解一下进程、虚拟地址空间的概念。

3

这分几种情况
1)共享内存。不分彼此都可以用
2)古老的DOS 实模式。可以直接用 指针操作
3)Window 及其他现在操作系统
Window 提供了远程内存读写函数,可以操作别的程序的内存
4)另外,几乎全部调试器,都可以读写所加载程序的内存。
也许还有更多
,例如通过驱动程序,操作别的程序的内存
另外,远程控制系统,可以通过网络连接,
控制另一台计算机进行任何操作,读写内存更不在话下了

4

打印出来的地址值是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(原因是实模式没有分段或分页机制,Cpu不进行自动地址转换)
WriteProessMemory

2

可以看看windows编程之类的书籍。

4

进程通信问题  操作系统相关书籍有介绍

3

引用:

进程通信问题  操作系统相关书籍有介绍

引用:
Quote: 引用:

这分几种情况
1)共享内存。不分彼此都可以用
2)古老的DOS 实模式。可以直接用 指针操作
3)Window 及其他现在操作系统
Window 提供了远程内存读写函数,可以操作别的程序的内存
4)另外,几乎全部调试器,都可以读写所加载程序的内存。
也许还有更多
,例如通过驱动程序,操作别的程序的内存
另外,远程控制系统,可以通过网络连接,
控制另一台计算机进行任何操作,读写内存更不在话下了

能完成这些的也只有机器指令之上,高级语言之下的汇编了吧?

不是啊,只是用一些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
);

3

引用:
Quote: 引用:

题主需要了解一下进程、虚拟地址空间的概念。

问一下从哪里了解?

百度一下就可以了解了,假如想系统学习,需要看《操作系统》书,操作系统是计算机专业的必修课。