关于CreateFileMapping的api的问题
程序代码:
#include<Windows.h> #include<stdio.h> int main() { HANDLE hMapping; char *buf; HANDLE hThread; char shellcode[] = "my shellcode"; //创建内核对象:物理页 hMapping = CreateFileMapping( INVALID_HANDLE_VALUE, //为NULL则为创建物理页 NULL, PAGE_EXECUTE_READWRITE, //物理页的属性 为 可读写执行 0, 0x1000, NULL //指定映射名 ); //将当前进程中的虚拟地址与物理页进行映射 buf = (char *)MapViewOfFile( hMapping, FILE_MAP_ALL_ACCESS, //虚拟内存的属性,并且物理内存的属性要比虚拟内存的属性高 0, 0, sizeof(shellcode) ); //返回值为映射的起始地址,指向物理页 CopyMemory(buf, shellcode, sizeof(shellcode)); //复制shellcode到buf所指向的物理页 hThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)buf, NULL, 0, NULL); WaitForSingleObject(hThread, INFINITE); // 等待线程执行完成 //关闭映射 UnmapViewOfFile(buf); //关闭句柄 CloseHandle(hMapping); return 0; }
这种方式自己查资料也没找到,一般执行shellcode都是通过VirtualAlloc都申请内存的,但是自己想试下CreateFileMapping,但是发现没有成功,想问问大佬们有什么原因吗,如果有的话buf = (char *)MapViewOfFile是这句话出现问题吗,但是buf指向的不是物理页的地址吗,按理说应该是行得通的,自己的windows10系统可以运行 但是放在08上就不行了哇