Можно создать дубликат:
Why won't the loader load at the desired locationЧто возвращает MapViewOfFile?
«MapViewOfFile», делает эта функция отображения файла в виртуальной памяти и возвращает базовый адрес отображаемой памяти ?? Если «да», то следующий код должен выводить 0X400000, по умолчанию по умолчанию, exe загружаются в этом месте, но вывод 0X360000. Зачем??
#include<iostream>
#include<Windows.h>
#include<stdio.h>
#include<WinNT.h>
int main()
{
HANDLE hFile,hFileMapping;
LPVOID lpFileBase;
if((hFile = CreateFile(TEXT("c:\\linked list.exe"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)) == INVALID_HANDLE_VALUE)
std::cout<<"unable to open";
if((hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL)) == 0)
{
CloseHandle(hFile);
std::cout<<"unable to open for mapping";
}
if((lpFileBase = MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0))== 0)
{
CloseHandle(hFile);
CloseHandle(hFileMapping);
std::cout<<"couldn't map view of file";
}
printf("%x\n",lpFileBase);
}
Да, код *, который вы написали *, отображается на 0x400000 (без учета ASLR). Не файл, который вы загружаете позже, он не может быть сопоставлен с этим адресом, поскольку он уже используется вашим кодом. Linker, Advanced, Base Address, чтобы переместить код в другом месте. –
Получил это спасибо .. – user1232138