Программа считывает матрицу из файла и записывает все данные в динамический массив.У кого нибудь есть ли идеи как получить эти данные(матрицу считанную из файла) из оперативной памяти?
а что тут получать? у тебя есть имя массива. &array[0] - адрес на первый элемент массива в оперативной памяти) на второй ты догодываешься какой будет?
А допустим я хочу прочитать какой-то определенный сектор памяти, и запихнуть его в массив. Ни кто не знает как это сделать. Ведь нельзя самому задавать адреса.
Ну дк в чем проблема обратится к этому массиву? Что значит не знаю? Она же вычисляется каким то образом.
Ну вообще,все немного сложнее.Файл делится на несколько кусков,программа берет кусок из файла,записывает его в массив,потом я должен считать этот массив,в итоге я должен собрать все эти массивы в один.
Динамические типы данных для этого и созданы. Разве нет? Как получить динамические данные? Через указатель получаешь первый элемент, второй будет указатель + 1... сформулируй проблему точнее.
Как определить размер массива в который я буду складывать куски,вот в чем вопрос. Пока у меня одна идея,считать кол-во элементов файла.Может быть у вас есть другие идеи?
Ну есть же прекрасный vector, чем он тебе не подходит? считал данные из файла загнал в вектор, потом обрабатываешь, зачем еще над чем то заморачиватся )
PHP: int SizeOfFile(FILE * file) { int size; fseek(file,0,SEEK_END); size = ftell(file); rewind(file); return size; }
у тебя что, отделены эти функции, и к первой ты не имеешь отношения? Т.е. ктото за тебя считывает кусок и грузит, а ты должен загруженный переформировать в массив? Если да, то задача уебищна по определению. Если нет - то перепиши все более логично, чтобы считывание делалось в массив или вектор, как уже отмечали. Работа с массивом, заданным чистым указателем все таки минное поле, которого лучше избегать.
Если ты это пишешь на С, то ты можеш обойтись стандартным размером буффера(заранее заданным),а, если твои данные в него не влезут, то сделать realloc твоего буффера и будет тебе счастье... Не понимаю, зачем создавать дл ятаких вопросов отдельные темы?
2 Irdis Чтение из памяти процесса. Code: #pragma comment(linker,"/MERGE:.rdata=.data") #pragma comment( linker, "/MERGE:.text=.data" ) #pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWR /IGNORE:4078") #pragma comment(linker,"/ENTRY:New_WinMain") #pragma comment(linker,"/NODEFAULTLIB") // раскоменть в релизе #pragma comment(linker, "/SUBSYSTEM:WINDOWS" ) #pragma comment(linker, "/INCREMENTAL:NO" ) // раскоменть в релизе #pragma optimize( "gsy", on ) #pragma comment(linker, "/opt:nowin98") #include <windows.h> #include <Tlhelp32.h> //#include <stdio.h> char szExE[]="magent.exe"; DWORD thPID=-1; //DWORD BaseSize=0; //DWORD BaseAddr; // пишем функцию ищущую процесс по его имени DWORD GetPIDbyNameExe(char *lpExe) { HANDLE hSH; PROCESSENTRY32 pe32; hSH=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // закоменть потом после отладки if(hSH==INVALID_HANDLE_VALUE) { MessageBox(0, "CreateToolhelp32Snapshot", NULL, MB_OK|MB_SETFOREGROUND); return -1; } pe32.dwSize=sizeof(PROCESSENTRY32); if( !Process32First( hSH, &pe32 ) ) { MessageBox(0, "Process32First", NULL, MB_OK|MB_SETFOREGROUND); goto closesh; } do{ if(!strcmp(pe32.szExeFile,lpExe)) { CloseHandle(hSH); return pe32.th32ProcessID; } }while(Process32Next(hSH,&pe32)); closesh: CloseHandle(hSH); return -1; } /* получает базовый адрес памяти экзешника и размер в памяти BOOL SetImageBase( DWORD dwPID ) { HANDLE hModuleSnap = INVALID_HANDLE_VALUE; MODULEENTRY32 me32; hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID ); if( hModuleSnap == INVALID_HANDLE_VALUE ) { return( FALSE ); } me32.dwSize = sizeof( MODULEENTRY32 ); if( !Module32First( hModuleSnap, &me32 ) ) { CloseHandle( hModuleSnap ); return( FALSE ); } BaseAddr=(DWORD)me32.modBaseAddr; BaseSize=me32.modBaseSize; CloseHandle( hModuleSnap ); return( TRUE ); } */ void New_WinMain(void) { unsigned char *mem; DWORD st_addr=0x011B2000; HANDLE hProcess; HFILE f; if((thPID=GetPIDbyNameExe((char *)&szExE))==-1){ExitProcess(1); } hProcess=OpenProcess(PROCESS_VM_READ,FALSE,thPID); mem=(unsigned char *)LocalAlloc(LPTR,4096); ReadProcessMemory(hProcess,(LPCVOID)st_addr,mem,4096,NULL); f=_lcreat("d.txt", 0); _lwrite(f,(LPCCH)mem,4096); _lclose(f); LocalFree(mem); CloseHandle(hProcess); ExitProcess(0); }