问题标签 [virtualalloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1696 浏览

c++ - virtualalloc的问题

mainhashbuf、progress 和 virtualpointer 是指向 char 的指针。我首先保留空间,虚拟指针指向该空间。然后我将其他 2 个指针设置为等于虚拟指针。然后我使用进度(现在也指向保留空间)提交(1<<15)该空间,然后增加进度指针。然后我尝试在 mainhashbuf 应该指向的那个现在提交的空间中设置一个值,但是我得到一个写入异常。我是否使用了错误的 virtualalloc 和/或对指针的实际工作方式有错误的概念?

0 投票
3 回答
1288 浏览

linux - 如何分配一个类似VirtualAlloc的内存区域?

我正在寻找一种在 Linux 上分配内存的方法,类似于 Windows 上的 VirtualAlloc。要求是:

  1. 要分配的内存块大小为 2^16。
  2. 内存块地址大于 0x0000ffff
  3. 内存块地址的最后 16 位必须为零。

在 Windows 上,因为应用程序地址的下限 (lpMinimumApplicationAddress) 我们有 (2) 明显的权利。从(1)、(2)和系统规则我们也实现了(3)。

感谢您的帮助。

0 投票
3 回答
1720 浏览

c++ - 新建/删除[] 和 VirtualAlloc

这对我来说崩溃了

我知道这是因为 VirtualAlloc 而崩溃,但我不知道如何解决这个问题......

0 投票
2 回答
1439 浏览

c++ - 虚拟分配地址

我写了下面的代码

但是 VirtualAlloc 失败并且 ptr1,ptr2 的值始终为 NULL。我想使用地址 0x70000000,0x80000000。有谁知道我可以如何使用这些地址?

0 投票
1 回答
2255 浏览

c# - 使用 VirtualAlloc 从字节数组运行程序?

我正在使用 C# 开发应用程序 SFX / Protector,我希望从字节数组执行受保护的程序集,而不是将其写入硬盘,以便逆向工程更加困难。

我在字节数组中有一个程序(它有一个有效的入口点),我想执行它。我在这个网站上发现了一个类似的问题,我该怎么做,我知道这可以使用下面的代码片段来完成,但是有人可以指导我如何使用这个从字节数组运行程序吗?

从技术上讲,他下面的代码让我这样做:

我如何实现这个答案以从字节数组运行程序。我无法完全理解我可以用这段代码做什么。请帮忙

这是我找到这个答案的链接: Is it possible to perform an x​​86 assembly sequence from within C#?

Anyhelp将不胜感激。

0 投票
1 回答
2588 浏览

winapi - 在大型数组上使用 VirtualAlloc 保留与提交+保留内存的好处

我正在编写一个 C++ 程序,它基本上适用于非常大的数组。在 Windows 上,我使用 VirtualAlloc 为我的数组分配内存。现在我完全理解了使用 VirutalAlloc 保留和提交内存的区别;但是,我想知道将内存逐页提交到保留区域是否有任何好处。特别是,MSDN ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887(v=vs.85).aspx ) 包含对 MEM_COMMIT 选项的以下解释:

除非/直到实际访问虚拟地址,否则不会分配实际的物理页面。

我的实验证实了这一点:我可以保留和提交几 GB 的内存,而不会增加我的进程的内存使用量(如任务管理器中所示);只有当我实际访问内存时才会分配实际内存。

现在我看到了很多例子,他们认为应该保留大部分地址空间,然后逐页提交内存(或在一些更大的块中,取决于应用程序的逻辑)。然而,正如上面所解释的,在访问内存之前似乎并没有提交内存。因此,我想知道逐页提交内存是否有任何真正的好处。事实上,由于许多系统调用实际提交内存,逐页提交内存实际上可能会减慢我的程序速度。如果我一次提交整个区域,我只需支付一个系统调用,但内核似乎足够聪明,实际上只分配我实际使用的内存。

如果有人能向我解释哪种策略更好,我将不胜感激。

0 投票
0 回答
141 浏览

memory-management - 映射具有特定地址的页面

我正在尝试使用 VirtualAlloc 映射虚拟内存页面,但它是 8TB Windows 7 64 位允许范围之外的特定地址,我在 Windows Internals 中读过这个地址范围用于“页表自映射结构”,无论如何,有什么办法可以用 0x7ffffffff000 地址映射内存页吗?

0 投票
3 回答
7382 浏览

c++ - 立即检测 Windows 上的堆损坏错误。如何?

我睡不着!:)

我在 Windows 上有一个相当大的项目,遇到了一些堆损坏问题。我已经阅读了所有内容,包括这个不错的主题:如何调试堆损坏错误?,但是没有什么可以开箱即用地帮助我。Debug CRTBoundsChecker检测到堆损坏,但地址总是不同的,检测点总是远离实际的内存覆盖。我直到半夜才睡觉,并制作了以下技巧:

一些堆损坏错误变得很明显,我能够修复它们。退出时不再有 Debug CRT 警告。但是,我对这个 hack 有一些疑问:

1.它会产生任何误报吗?

2.它可以遗漏一些堆损坏吗?(即使我们替换 malloc/realloc/free?)

3.它无法在 32 位上运行OUT_OF_MEMORY,只能在 64 位上运行。我是对的,我们只是用完了 32 位的虚拟地址空间吗?

0 投票
1 回答
1911 浏览

c - 使用 VirtualQueryEx 在远程进程中枚举模块不会返回所有模块

我正在尝试获取给定进程正在使用的 DLL 列表,我正在尝试通过 VirtualQueryEx 来实现。我的问题是它返回给我的只是 DLL 的部分列表,而不是全部(我可以使用 Process Explorer 或在给定进程上使用 VirtualQuery 来查看该列表)。

这是代码:

我正在得到结果szBuf

此函数是 DLL 文件的一部分,因此我很难调试。

现在 DLL 被编译为 x64 二进制文件,我将它用于 x64 进程。

PS 我知道 EnumProcessModules 并且我没有使用它是有原因的(太长了:)。

0 投票
1 回答
540 浏览

windows - 代码区 32 位位移内的可执行内存

在 64 位 Windows 上用 C++ 编写 JIT 编译器,生成的代码有时需要调用用 C++ 编写的运行时函数。目前我正在分配内存来放置生成的代码VirtualAlloc(0, bytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE);最后一个标志很重要,因为分配的内存不可执行。

VirtualAlloc大概可以在 64 位地址空间中的任何位置返回内存,这对于数据来说很好(通常需要超过 4 GB,因此它确实需要 64 位寻址),但 x64call指令的最有效形式需要一个 32 位 IP 相对偏移量,并且由于生成的代码量将小于 4 GB,因此最好将其定位在从 C++ 编译的代码的 32 位位移内。

有没有办法安排这个?