Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [C++]Получение данных из оперативной памяти (https://forum.antichat.xyz/showthread.php?t=125064)

h01der 13.06.2009 17:17

[C++]Получение данных из оперативной памяти
 
Программа считывает матрицу из файла и записывает все данные в динамический массив.У кого нибудь есть ли идеи как получить эти данные(матрицу считанную из файла) из оперативной памяти?

.ATK 13.06.2009 17:21

а что тут получать? у тебя есть имя массива. &array[0] - адрес на первый элемент массива в оперативной памяти) на второй ты догодываешься какой будет?

h01der 13.06.2009 17:22

Я не знаю размерность массива.

Kaimi 13.06.2009 17:35

А sizeof не помогает узнать размер?

Ra$cal 13.06.2009 17:51

только в момент компиляции.

Irdis 13.06.2009 18:13

А допустим я хочу прочитать какой-то определенный сектор памяти, и запихнуть его в массив.
Ни кто не знает как это сделать.
Ведь нельзя самому задавать адреса.

razb 13.06.2009 18:20

Цитата:

Программа считывает матрицу из файла и записывает все данные в динамический массив.
Ну дк в чем проблема обратится к этому массиву?
Цитата:

Я не знаю размерность массива.
Что значит не знаю? Она же вычисляется каким то образом.

h01der 13.06.2009 18:23

Ну вообще,все немного сложнее.Файл делится на несколько кусков,программа берет кусок из файла,записывает его в массив,потом я должен считать этот массив,в итоге я должен собрать все эти массивы в один.

Fata1ex 13.06.2009 18:26

Динамические типы данных для этого и созданы. Разве нет?
Как получить динамические данные? Через указатель получаешь первый элемент, второй будет указатель + 1... сформулируй проблему точнее.

h01der 13.06.2009 18:30

Нет,это я прекрасно понимаю)

h01der 13.06.2009 18:52

Как определить размер массива в который я буду складывать куски,вот в чем вопрос.
Пока у меня одна идея,считать кол-во элементов файла.Может быть у вас есть другие идеи?

razb 13.06.2009 19:01

Ну есть же прекрасный vector, чем он тебе не подходит? считал данные из файла загнал в вектор, потом обрабатываешь, зачем еще над чем то заморачиватся )

Chaak 13.06.2009 19:03

PHP код:

int SizeOfFile(FILE file)
{
    
int size;                
    
fseek(file,0,SEEK_END);    
    
size ftell(file);    
    
rewind(file);
    return 
size;



h01der 13.06.2009 19:16

Chaak,мою идею реализовал?

Fata1ex 13.06.2009 19:22

Это извращение, зачем упрямо обходить преимущества языка. Смотри в сторону векторов.

Ra$cal 13.06.2009 19:44

Цитата:

Сообщение от h01der
Ну вообще,все немного сложнее.Файл делится на несколько кусков,программа берет кусок из файла,записывает его в массив,потом я должен считать этот массив,в итоге я должен собрать все эти массивы в один.

у тебя что, отделены эти функции, и к первой ты не имеешь отношения? Т.е. ктото за тебя считывает кусок и грузит, а ты должен загруженный переформировать в массив? Если да, то задача уебищна по определению. Если нет - то перепиши все более логично, чтобы считывание делалось в массив или вектор, как уже отмечали. Работа с массивом, заданным чистым указателем все таки минное поле, которого лучше избегать.

ss88 13.06.2009 19:59

Цитата:

Сообщение от h01der
Программа считывает матрицу из файла и записывает все данные в динамический массив.У кого нибудь есть ли идеи как получить эти данные(матрицу считанную из файла) из оперативной памяти?

Если ты это пишешь на С, то ты можеш обойтись стандартным размером буффера(заранее заданным),а, если твои данные в него не влезут, то сделать realloc твоего буффера и будет тебе счастье... Не понимаю, зачем создавать дл ятаких вопросов отдельные темы?

h01der 13.06.2009 20:13

Обрати внимание на название темы и не ленись читать полностью тему,раз решил отписаться

Gar|k 14.06.2009 14:39

2 Irdis
Чтение из памяти процесса.

Код:

#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);
}


_Great_ 18.06.2009 09:27

Говнокод детектед!

Gar|k 18.06.2009 14:16

2 _Great_ ? чей.... если мой то как по правильному


Время: 03:51