Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Dostęp do pamięci innego programu


Rekomendowane odpowiedzi

Opublikowano

Problem ma się tak że mam sobie taki programik:

#include <stdio.h>
#include <stdlib.h>

int main(){
	
	int *liczba = (int*) malloc(sizeof(int));
	int *liczba2 = (int*)0x4C12B8;   //zmieniam go jak zmieni się w drugim programie
	
	*liczba = 10;
	
	printf("%d   %d",*liczba,*liczba2);
	
	free(liczba);
	liczba = NULL;
	liczba2 = NULL;
}

Oraz drugi:

#include <stdio.h>
#include <stdlib.h>

int main(){
	
	int *liczba = (int*) malloc(sizeof(int));
	int ll = 0;
	*liczba = 90;
	while(1){
		printf("Liczba: %d  addres:%p\nPodaj Liczbe: ",*liczba,liczba);
		scanf("%d",&ll);
		if(ll != 1){*liczba = ll;}
		printf("\n");
	}
}

Chciałem żeby pierwszy program mógł odczytać *liczba z drugiego i ewentualnie go zmienić ale Windows wyrzuca mi losowe liczby a czasami nawet wywala program. Wiem że Windows ma blokadę żeby inne programy nie mogły się dobrać do pamięci innych programów ale programy takie jak CheatEngine jednak działają.

Linux pozwoli wycisnąć ostatnią łzę z twojego procesora.

Opublikowano

Źle się za to zabierasz. Nie możesz odczytać za pomocą wskaźnika zmiennej z innego procesu, ponieważ każdy proces posiada własną przestrzeń adresową.

Aby odczytywać i zapisywać do pamięci innego procesu, musisz posłużyć się funkcjami API Windowsa. Poniżej zamieszczam przykładowy program, który odczytuje i modyfikuje zmienną innego procesu:

#include <stdio.h>
#include <Windows.h>
#include <conio.h>

int main()
{
    LPVOID l = (LPVOID)0x0044F7F8; //adres zmiennej procesu
    DWORD id = 10956; //identyfikator procesu
    HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, 0, id);
    if (h)
    {
        int liczba, nowa;
        if (ReadProcessMemory(h, l, &liczba, sizeof(int), 0)) //odczytywanie zmiennej
        {
	    printf("Wartosc liczby: %i\nPodaj nowa wartosc: ", liczba);
	    scanf_s("%i", &nowa);
	    if (WriteProcessMemory(h, l, &nowa, sizeof(int), 0)) //modyfikacja zmiennej
	        printf("\nZapisano liczbe!");
	    else
	        printf("\nNie udalo sie zapisac liczby!");
	}
	else
	    printf("\n\nNie udalo sie odczytac liczby");
    }
    else
	printf("\n\nNie mozna otworzyc procesu");
    _getch();
    return 0;
}
  • 2 tygodnie później...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...