Народ, вот такая задача ... например у меня есть процесс, у меня есть адресс (например,022C51F0) , так вот, каким образом мне получить м мою переменную значение под етим адресом ... (в С++), аналогичто нужно ЗАПИСАТЬ под етим адресом число ...
Значит так, если меня не подводит память, адресок у тебя хранится в понтер-переменной. Чтоб получить значение по адресу делаеш например следующее int num=*p, где p собственно поинтер ии по-русски адрес. Записываем аналогично *р=548478. Другое дело, чужой процесс тебе не разрешит его @#at, только свой. Для посленего нужно копать глубже и по-другому!
Для Shama Я не пробывал, но чтото мне подсказывает что он будет сильно ругатся, типо немогу урровнять (инт) и (*инт), тебе так не кажется!? Dr.Golova Попробуем ...
Dr.Golova, Энто я и имел ввиду, благодарствую. А в случае, если ругань будет, просто выровняй - слушай Sharpa
Да не работает оно, оно и не могло работать,так мне нужен доступ в ЧУЖОЙ ПРОЦЕСС. 1) Толи я чегото туго не понимаю, толи вы не поняли что мне нужно, вот вам наводка на цель: все знаю прогамку АртМонеи, вот там, выбираеш процесс и она выводит АДРЕСС и РЯДОМ значение ... вот мне нужно чтобы из адресса (который можно например взять с тогоже АртМонеи) я мог получить/положить значиние 2)ReadProcessMemory()/WriteProcessMemory(), ретурн фалс, оба: Код (Text): ReadProcessMemory( Handle,"007EF9BC",&value,2,NULL); Я понимаю что ета "2" звучит подозрительно, но он просто ретурнит фасл, независимо от переменных Я догадывался что ето изза запрета ... тоесть не даёт доступ, пробывал юзать: VirtualProtectEx() Код (Text): BOOL VirtualProtectEx( HANDLE hProcess, LPVOID [b]lpAddress[/b], SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect ); Вот только немогу получить lpAddress([in] Pointer to the base address of the region of pages whose access protection attributes are to be changed.) Вот где взять етот lpAddress ?! ...
left behind Ух, кошмар какой, тебя кто научил такому?? Код (Text): BOOL ReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead ); Раз уж на то пошло: Код (Text): WORD value; DWORD dwReaded; ReadProcessMemory( Handle,0x007EF9BC,&value,2,&dwReaded);
Код (Text): cannot convert parameter 2 from 'const int' to 'const void *' Вот например в АртМонеи, я выбрал процесс, и получил например Код (Text): 00AC44AD 666 Как мне в программе из 00AC44AD выдавить 666 Вот так я делал, ПОЧЕМУТО ПРИ РАЗНЫХ АДРЕСАХ ЗНАЧЕНИЕ НЕ МЕНЯЕТСЯ,БОЛЕЕ ТОГО, ОНО НЕ ОТВЕЧАЕТ ТОМУ ЧТО МНЕ ПОКАЗЫВАЕТ АРТМОНЕИ! #include <windows.h> #include <iostream.h> #include "psapi.h" <font color="green] Код (Text): void Process( DWORD processID ) { TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); if (NULL != hProcess ) { HMODULE hMod; DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),&cbNeeded) ) GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) ); } int a = 0x005ACF35; LPCVOID b = (LPCVOID)a; WORD value; if(ReadProcessMemory( hProcess, &b, &value, 2, NULL)) { cout <<szProcessName<<" - " <<value << " [ " << b <<" ]"<<endl; } } void main () { DWORD aProcesses[1024], cbNeeded; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return; DWORD nProcess = cbNeeded / sizeof(DWORD); for ( int i = 0; i < nProcess; i++ ) Process( aProcesses[i] ); int pause;cin>>pause; } </font><!--color-->
ReadProcessMemory( Handle,(void*)0x007EF9BC,&value,2,&dwReaded); И вообще, вот пример: 756106420__pen.zip
Спасибо конешно тебе, что время тратил, если ты меня хотел убить на повал, ты ето сделал, АСМ, очень мило, я его не знаю абсолютно, Мне желательно на С++, вот в такой форме, как я выложил пример... И еще вопросик, почему все хендлы у меня одинаковые, ето так должно быть?! Народ, в етом нет ничего сложного, тут нужно просто знать, мне больше спросить не у кого , вы тут все лихие программеры, ХЕПЛ !!!
Значит, пора исправлять эту досадную случайность. А я его не знаю. Сбегай на RSDN, там подскажут. Но лучше почитал бы справку (MSDN (PSDK)) нормально, чем людей тормошить.
left behind > "ПОЧЕМУТО ПРИ РАЗНЫХ АДРЕСАХ ЗНАЧЕНИЕ НЕ МЕНЯЕТСЯ" Потому, что в ReadProcessMemory ты передаешь ссылку &b, а это фиксированный указатель на переменную b в твоем адресном прстранстве, а нужно передавать b или (LPCVOID)a, т.е. значение 0x005ACF35, присвоенное переменным b или a