首页
社区
课程
招聘
[求助] VirtualAlloc申请内存失败,错误8
发表于: 2017-5-2 21:46 5220

[求助] VirtualAlloc申请内存失败,错误8

2017-5-2 21:46
5220

在研究gh0st的文件传输功能的时候发现一个bug,传输大文件的时候,传输时间长了,会申请内存失败,错误8(表示存储空间不足,无法处理此命令).代码在下面



UINT CBuffer::ReAllocateBuffer(UINT nRequestedSize)

{

if (nRequestedSize < GetMemSize())

return 0;

// Allocate new size

UINT nNewSize = (UINT) ceil(nRequestedSize / 1024.0) * 1024;

// New Copy Data Over

PBYTE pNewBuffer = (PBYTE) VirtualAlloc(NULL,nNewSize,MEM_COMMIT,PAGE_READWRITE);

if (pNewBuffer==0)

{

TRACE("Fail to VirtualAllo,error=%d\n",GetLastError());

}

UINT nBufferLen = GetBufferLen();

CopyMemory(pNewBuffer,m_pBase,nBufferLen);

if (m_pBase)

VirtualFree(m_pBase,0,MEM_RELEASE);

// Hand over the pointer

m_pBase = pNewBuffer;

// Realign position pointer

m_pPtr = m_pBase + nBufferLen;

m_nSize = nNewSize;

return m_nSize;

}



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1753
活跃值: (885)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
PBYTE  pNewBuffer  =  (PBYTE)  VirtualAlloc(NULL,nNewSize,MEM_COMMIT,PAGE_READWRITE);
换成这样试试:
PBYTE  pNewBuffer  =  (PBYTE)  VirtualAlloc(NULL,nNewSize,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
还有·如果你是X64系统,则最好编译成X64运行
2017-5-3 09:35
0
雪    币: 782
活跃值: (3430)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
3
出错的时候最好打印出nRequestedSize的数值。
请求内存太大的话确实会报内存不足。
2017-5-3 11:00
0
雪    币: 2347
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我记得有一个Privilege可以开放解决这个问题...实际可能是确实size过大申请失败
2017-5-3 13:11
0
游客
登录 | 注册 方可回帖
返回
//