Kezdőoldal » Számítástechnika » Programozás » C nyelvben memória szerkesztés...

C nyelvben memória szerkesztés cím alapján?

Figyelt kérdés
Van egy címem, tegyük fel ez az: 0060FEFC, ennek az értéke például 3. Én pedig szeretném árítni, hogy 4 legyen. Hogyan kellene?
2020. márc. 13. 19:54
1 2 3
 11/21 anonim ***** válasza:
64%
Lehet. De az operációs rendszerek ezt nem fogják engedni. Szóval igazából nem lehet. Na meg kezdő fejlesztőként inkább felejtsd ezt el.
2020. márc. 14. 00:12
Hasznos számodra ez a válasz?
 12/21 anonim ***** válasza:
0%

Amit írtál cheatengine, az nem igazán használ C nyelvet, egy helyen volt benne, de annak nem sok köze van a lényegi működéséhez. A nagy része c++, és pascal.

Egyébként szinte biztos is voltam benne, hogy erre kéne neked program.

Segítek: az az engine sem képes c kódból idegen program memóriáját piszkálni, mert azt bármelyik operációs rendszer letiltja. Assembly-ben közvetlenül gépi kóddal éri el a hatást, és mellette malware-szerű viselkedést mutat, ezért a vírusírtók gyakran letiltják (malware viselkedés tünetei: programok visszatérési értékét hamisítja, hogy ne return-öljenek hibával, operációs rendszeren felül memóriát ír át...)

Én azt tanácsolom, hogyha mindenképp csalni akarsz, akkor minden játékba építenek be erre módot, többnyire ingame konzol formájában, vagy konfig fájlban. Ezt használd inkább, biztonságosabb. (A windows kernel is a memóriából fut, valamit félrenyúlsz, és kék-halál, vagy rosszabb)

2020. márc. 14. 00:35
Hasznos számodra ez a válasz?
 13/21 A kérdező kommentje:

12. Nem, nem a csalásról van szó, akkor a Cheat Enginet használnám, ennyi, nem foglalkoznék én a C-vel.


Csak épp a memóriáról tanulok, és erről nem volt tananyag, gondoltam ezzel kiegészítem a tudásom

2020. márc. 14. 13:15
 14/21 anonim ***** válasza:
100%

"Van egy címem.."

Már itt megállhatunk. Egy sima (userspace) processz csak a saját virtuális memóriáját látja, és a címek is arra vonatkoznak. Az op.rendszer (hardver támogatással) ezt fordítja fizikai címmé, de a fizikai címeket közvetlenül nem fogod tudni elérni programból. Ha kétszer indítanád a fenti kis progit, ami az általad írt memóriacímről olvas, akkor hiába ugyanaz a cím, a háttérben két különböző fizikai címről fog olvasni. (Nézz utána a címfordításnak, védett módnak, virtuális memóriának.)

A Cheat Engine pedig egy saját, kernel-space-ben futó modult használ.

2020. márc. 15. 10:03
Hasznos számodra ez a válasz?
 15/21 anonim ***** válasza:

"int *aP = "0060FEFC";"

Ez gondolom csak poén... :)) Az egyetlen pointer literál a null. Int vagy long (vagy inkább intptr_t) változót cast-olhatsz pointerré.

2020. márc. 15. 10:12
Hasznos számodra ez a válasz?
 16/21 anonim ***** válasza:
53%

Nem értem mi a bajotok ezzel, tökéletesen csinálja amit kell, mégpedig:

létrehoz egy sztringet, ami értéke 0060FEFC.

A fordító látja, hogy pointer van, aminek egy karaktertömböt adnak át, így létrehoz a kérésnek megfelelően egy integer tömböt, majd castolja a karaktertömböt int tömbbé, és abban (lyukacsosan 4 bájtonként elhelyezve) elhelyezi a sztringet

2020. márc. 15. 15:08
Hasznos számodra ez a válasz?
 17/21 anonim ***** válasza:
50%

-- "Segítek: az az engine sem képes c kódból idegen program memóriáját piszkálni, mert azt bármelyik operációs rendszer letiltja. Assembly-ben közvetlenül gépi kóddal éri el a hatást"


Ezzel nem sokat segítettél a kérdezőnek, inkább csak összekavartad. Teljesen mindegy, hogy milyen nyelv, C vagy assembly, csak rendszerhívással tudod megtenni. Nem "közvetlenül gépi kóddal". Hiába írsz ilyet, azt is "letiltja" az operációs rendszer. Eleve, ahogy előttem már írták, nem is látod, meg sem tudod címezni azt a területet a saját programodból.


Remélem ezt is te írtad:


-- "A fordító látja, hogy pointer van, aminek egy karaktertömböt adnak át, így létrehoz a kérésnek megfelelően egy integer tömböt, majd castolja a karaktertömböt int tömbbé, és abban (lyukacsosan 4 bájtonként elhelyezve) elhelyezi a sztringet"


Öö.. nem? Megtennéd, hogy beleírod a programba ezt, és megnézed, hogy mit ír ki?

printf("%d %d", aP+1, aP+2);

2020. márc. 16. 12:51
Hasznos számodra ez a válasz?
 18/21 anonim ***** válasza:

Pici elmélet:

[link]

2020. márc. 16. 13:13
Hasznos számodra ez a válasz?
 19/21 anonim ***** válasza:

#17,nagy baromságot mondtál.

Mivel int* a tömb, persze hogy a %d jót ír ki +1-re és +2-re is, mert int méretnyit ugrik. Ha nem hiszel nekem, én javasolok neked egy hexdump-ot

2020. márc. 16. 15:19
Hasznos számodra ez a válasz?
 20/21 anonim ***** válasza:
50%

"majd castolja a karaktertömböt int tömbbé, és abban (lyukacsosan 4 bájtonként elhelyezve) elhelyezi a sztringet"


Te ezt állítottad. Abból a sorból látni lehet, hogy nem így van. Nem értem a problémát.

2020. márc. 17. 15:12
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!