📄 memory.c
字号:
#include <api.h>
#include <stdio.h>
#include <windows.h>
//创建堆
/* flOptions:
HEAP_CREATE_ENABLE_EXECUTE 0x00040000
HEAP_GENERATE_EXCEPTIONS 0x00000004
HEAP_NO_SERIALIZE 0x00000001
*/
HANDLE WINAPI HeapCreate(
DWORD flOptions,
SIZE dwInitialSize,
SIZE dwMaximumSize
){
printf("HeapCreate: 0x%X, 0x%X, 0x%X \n", flOptions, dwInitialSize, dwMaximumSize );
return (HANDLE)0x10000000;
}
//Copy memory
void WINAPI CopyMemory(
PVOID Destination,
const VOID* Source,
SIZE Length
){
memcpy( Destination, Source, Length );
printf("CopyMemory 0x%X, 0x%X, %d\n", Destination, Source, Length );
}
//
HANDLE WINAPI GetProcessHeap(void)
{
printf("GetProcessHeap\n" );
return (HANDLE)0x10000000;
}
//HeapAlloc
#define HEAP_ZERO_MEMORY 0x8
LPVOID WINAPI HeapAlloc(
HANDLE hHeap,
DWORD dwFlags,
SIZE dwBytes
){
printf("HeapAlloc 0x%X, 0x%X, %d\n", hHeap, dwFlags, dwBytes );
PVOID mem = KVirtualAlloc( -1, dwBytes, 0, 0 );
if( dwFlags&0x8 )
memset( mem, 0, dwBytes );
return mem;
}
//改变一个Heap的大小
SIZE WINAPI HeapCompact(
HANDLE hHeap,
DWORD dwFlags
){
printf("HeapCompact 0x%X, 0x%X\n", hHeap, dwFlags );
return 0; //failed!!
}
//释放一个堆
BOOL WINAPI HeapDestroy(
HANDLE hHeap
){
printf("HeapDestroy 0x%X\n", hHeap );
return FALSE; //failed
}
//释放从堆申请的内存
BOOL WINAPI HeapFree(
HANDLE hHeap,
DWORD dwFlags,
LPVOID lpMem
){
printf("HeapFree 0x%X, 0x%X, 0x%X\n", hHeap, dwFlags, lpMem );
if( hHeap==NULL )
return FALSE;
KVirtualFree( lpMem, 0, 0 );
return TRUE;
}
//把已经从堆中分配的内存重新分配大小
LPVOID WINAPI HeapReAlloc(
HANDLE hHeap,
DWORD dwFlags,
LPVOID lpMem,
SIZE dwBytes
){
printf("HeapReAlloc 0x%X, 0x%X, 0x%X, %d\n", hHeap, dwFlags, lpMem, dwBytes );
KVirtualFree( lpMem, 0, 0 );
PVOID mem = KVirtualAlloc( 0, dwBytes, 0, 0 );
if( dwFlags&0x8 )
memset( mem, 0, dwBytes );
return mem;
}
//由指针获得一个内存块的大小
//暂时SGOS内核没有提供这种系统调用
SIZE WINAPI HeapSize(
HANDLE hHeap,
DWORD dwFlags,
LPCVOID lpMem
){
printf("HeapSize 0x%X, 0x%X, 0x%X\n", hHeap, dwFlags, lpMem );
return 0x40000000; //we have much memory to use
}
//不了解该函数用途
BOOL WINAPI HeapValidate(
HANDLE hHeap,
DWORD dwFlags,
LPCVOID lpMem
){
printf("HeapValidate 0x%X, 0x%X, 0x%X\n", hHeap, dwFlags, lpMem );
return TRUE;
}
//获得一个Heap的信息
BOOL WINAPI HeapWalk(
HANDLE hHeap,
LPPROCESS_HEAP_ENTRY lpEntry
){
printf("HeapWalk 0x%X\n", hHeap );
return FALSE;
}
//申请某一虚拟地址上的内存
LPVOID WINAPI VirtualAlloc(
LPVOID lpAddress,
DWORD dwSize,
DWORD flAllocationType,
DWORD flProtect
){
printf("VirtualAlloc 0x%X, %d, 0x%X, 0x%X\n", lpAddress, dwSize, flAllocationType, flProtect );
LPVOID addr = KVirtualAlloc( lpAddress, dwSize, flAllocationType, flProtect );
//printf("Alloc Memory Address: 0x%X\n", addr );
return addr;
}
//释放某一地址上的内存
BOOL WINAPI VirtualFree(
LPVOID lpAddress,
DWORD dwSize,
DWORD dwFreeType
){
printf("VirtualFree 0x%X, %d, 0x%X\n", lpAddress, dwSize, dwFreeType );
int ret = KVirtualFree( lpAddress, dwSize, dwFreeType );
return ret;
}
//获得地址 lpAddress的使用情况
DWORD WINAPI VirtualQuery(
LPCVOID lpAddress,
PMEMORY_BASIC_INFORMATION lpBuffer,
DWORD dwLength
){
printf("VirtualQuery 0x%X, 0x%X, %d\n", lpAddress, lpBuffer, dwLength );
return 0;
}
//设置页面保护属性
BOOL WINAPI VirtualProtect(
LPVOID lpAddress,
DWORD dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect
){
printf("VirtualProtect 0x%X, %d, 0x%X, 0x%X\n", lpAddress, dwSize, flNewProtect, lpflOldProtect );
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -