- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个关于指针和内存分配的更理论化的问题。
比方说我有一个正在运行的进程,它分配了从 0x01 到 0x03 的 2 个字节。
如果我想从该内存中读取,我可能会使用 ReadProcessMemory。
但是我具体应该给出什么指针?
它是相对指针还是绝对指针?
可以说这个指针是相对的,所以我用指向 0x00 的指针调用 ReadProcessMemory。
但是 Windows 是如何知道进程内存从哪里开始到哪里结束的呢?
Windows 是否不必保存内存属于(或由其分配)进程的地址?
但是 Windows 在哪里保存这些信息以及它如何知道它保存信息的位置?
我听说过一种叫做“基本指针”的东西。我想这就是我要找的。
内存属于进程的地方。
好的,但现在假设我想将某个进程的内存复制到某个地方(也许是 HDD?),以便暂时清理我的内存。然后我想把内存放回原来的位置,但我不能告诉 Windows“从 0x00c 分配 2048 字节到 0x80c”。
我必须说“在某处分配 2048 字节”,然后 Windows 告诉我“某处”的位置' 是。
但是如果我再次重新启动我的应用程序,我将不得不告诉它“你好进程,你的整个内存不再是 0x01,它现在是 0x0c”。
有什么方法可以做到这一点吗?也许是 c# 或 c++,或者只是一个意见(这又是一个理论问题。无关好坏,只是有可能吗?)。
最佳答案
OK, but now let's say I want to copy the memory of a process somewhere (HDD maybe?) to clean up my memory for a little while. Then I want to put memory back where it was before, but I cant tell windows 'allocate 2048 bytes from 0x00c to 0x80c'.
只需自己分配内存即可。 Windows是一个虚拟内存系统。如果它不能将内容放入物理内存,那么它只会将内存分页回磁盘。您不需要做任何工作来导致这种情况发生。
编辑:在对评论的更多回应中,如果您想实际解除分配其他进程使用的内存,那您就完全不走运了。您无法可靠地确定目标进程如何使用该内存,并且您可能会由于访问冲突而导致目标进程立即终止。
此外,Windows NT 及其衍生产品上的所有内存分配都归结为 VirtualAlloc 函数,这些函数只能在调用进程的上下文中使用——您不能强制其他进程为您做这件事。
我想你可以自己编写一个内核驱动程序,它将随机垃圾写入内存管理器,让它做你想做的事,但至少你会导致目标进程失败,并且很可能导致目标进程失败整个系统。
但是,您的问题从根本上讲没有意义,因为 Windows 已经做出了类似的决定,将进程的内存移出到磁盘。 Windows 是 virtual memory系统,并且特定的内存位置仅在现有进程的上下文中才有意义。
关于c# - 更改进程的基址指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350328/
我刚接触 C 语言几周,所以对它还很陌生。 我见过这样的事情 * (variable-name) = -* (variable-name) 在讲义中,但它到底会做什么?它会否定所指向的值吗? 最佳答案
我有一个指向内存地址的void 指针。然后,我做 int 指针 = void 指针 float 指针 = void 指针 然后,取消引用它们以获取值。 { int x = 25; vo
我正在与计算机控制的泵进行一些串行端口通信,我用来通信的 createfile 函数需要将 com 端口名称解析为 wchar_t 指针。 我也在使用 QT 创建一个表单并获取 com 端口名称作为
#include "stdio.h" #include "malloc.h" int main() { char*x=(char*)malloc(1024); *(x+2)=3; --
#include #include main() { int an_int; void *void_pointer = &an_int; double *double_ptr = void
对于每个时间步长,我都有一个二维矩阵 a[ix][iz],ix 从 0 到 nx-1 和 iz 从 0 到 nz-1。 为了组装所有时间步长的矩阵,我定义了一个长度为 nx*nz*nt 的 3D 指针
我有一个函数,它接受一个指向 char ** 的指针并用字符串填充它(我猜是一个字符串数组)。 *list_of_strings* 在函数内部分配内存。 char * *list_of_strings
我试图了解当涉及到字符和字符串时,内存分配是如何工作的。 我知道声明的数组的名称就像指向数组第一个元素的指针,但该数组将驻留在内存的堆栈中。 另一方面,当我们想要使用内存堆时,我们使用 malloc,
我有一个 C 语言的 .DLL 文件。该 DLL 中所有函数所需的主要结构具有以下形式。 typedef struct { char *snsAccessID; char *
我得到了以下数组: let arr = [ { children: [ { children: [], current: tru
#include int main(void) { int i; int *ptr = (int *) malloc(5 * sizeof(int)); for (i=0;
我正在编写一个程序,它接受一个三位数整数并将其分成两个整数。 224 将变为 220 和 4。 114 将变为 110 和 4。 基本上,您可以使用模数来完成。我写了我认为应该工作的东西,编译器一直说
好吧,我对 C++ 很陌生,我确定这个问题已经在某个地方得到了回答,而且也很简单,但我似乎找不到答案.... 我有一个自定义数组类,我将其用作练习来尝试了解其工作原理,其定义如下: 标题: class
1) this 指针与其他指针有何不同?据我了解,指针指向堆中的内存。如果有指向它们的指针,这是否意味着对象总是在堆中构造? 2)我们可以在 move 构造函数或 move 赋值中窃取this指针吗?
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: C : pointer to struct in the struct definition 在我的初学者类
我有两个指向指针的结构指针 typedef struct Square { ... ... }Square; Square **s1; //Representing 2D array of say,
变量在内存中是如何定位的?我有这个代码 int w=1; int x=1; int y=1; int z=1; int main(int argc, char** argv) { printf
#include #include main() { char *q[]={"black","white","red"}; printf("%s",*q+3); getch()
我在“C”类中有以下函数 class C { template void Func1(int x); template void Func2(int x); }; template void
我在64位linux下使用c++,编译器(g++)也是64位的。当我打印某个变量的地址时,例如一个整数,它应该打印一个 64 位整数,但实际上它打印了一个 48 位整数。 int i; cout <<
我是一名优秀的程序员,十分优秀!