Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 20:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Pointer in C

Discussion on Pointer in C within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
TeraTroll's Avatar
 
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
Pointer in C

Guten Abend Community,

ich nähere mich so langsam dem Thema Pointer in C.
Ich habe da ein kleines Programm geschrieben, in welchem man den Wert einer internen Variable ändern kann.
Ich würde nur gerne fragen, ob es genauso auch beim "memory-manipulating" funktioniert, bzw. während einer Dll-Injektion da es sich ja dann so verhält, dass die Dll zu dem zu manipulierendem Prozess dazugehört, bzw. den selben Prozess bildet.


Die Kommentare sind für mich und die Übersichtlichkeit(gerne auch für die leichtere Verständnis dritter)

MfG Joshi
TeraTroll is offline  
Old 02/23/2015, 22:37   #2

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Wenn du dich für das Thema interessierst, solltest du eventuell auch ein paar Bücher über Betriebssyteme lesen, dann dürften einige Zusammenhänge klar werden.

Ja, das Prinzip ist bei einer DLL-Injection das selbe. Die DLL und der Prozess teilen sich den selben Adressraum, weshalb die Adressen, die du in einer DLL referenzierst, gültig sind.

Es gibt dann immer ein paar Besonderheiten zu beachten (Threadsicherheit, Zugriffsschutz, evtl. Überwachung des Adressraums durch ein Anti Cheat), aber sobald man Zeiger verstanden hat, ist es immer das selbe Prinzip.
snow is offline  
Old 02/23/2015, 23:26   #3
 
TeraTroll's Avatar
 
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
Ahhh okay, danke. Kannst du mir eines empfehlen?
Bin momentan noch im reinem Lernstadium und habe nur ein bisschen rum gespielt,
dabei habe ich mich gefragt, wenn ich nun eine Dll mit(natürlich muss ich noch einen Handler usw. einfügen) ca. dem selben Inhalt, auf die Adressen abgeglichen, in einen Prozess(Bsp. das Spiel Terraria) Injiziere und somit Werte verändern könnte.
Stimmt dies soweit?

MfG Joshi
TeraTroll is offline  
Old 02/24/2015, 00:11   #4

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Ja, das ist korrekt. Intern werden ja irgendwo Strukturen im Speicher angelegt und später wieder ausgelesen, wenn du auch Zugriff auf diese Adressen hast, kannst du da rumpfuschen wie du willst.

Zum Thema Betriebssyteme gibt es einiges, die Theorie wird wohl durch Tanenbaums Buch gut abgedeckt, praktisch (vor allem Windows) soll Windows via C/C++ ganz gut sein, Practical Reverse Engineering bietet auch einen breiten Einstieg in verschiedene Themen, unter anderem wie der Windows Kernel arbeitet (inklusive Kontext-Switching und Addressräume).
snow is offline  
Old 02/24/2015, 12:10   #5
 
TeraTroll's Avatar
 
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
Danke sehr für die Empfehlungen, ich denke, ich werde damit Anfangen, wenn ich mein Derzeitiges Buch durch habe. Das Thema Pointer ist meiner Meinung nach schon sehr komplex, von daher hat die System "Theorie" noch Zeit haben.
Erscheint mir auf den ersten Blick ein wenig zu komplex und abstrakt für einen Anfänger.
TeraTroll is offline  
Old 02/24/2015, 12:38   #6
 
_Roman_'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,620
Received Thanks: 237
Ich glaube, dass Pointer in dem Sinne komplex sind, wie vielfältig man die einsetzen kann. Die ganzen Anwendungen können einen dann ziemlich verwirren, wie ich finde. Da verliert man leicht den Überblick
_Roman_ is offline  
Old 02/24/2015, 12:44   #7
 
TeraTroll's Avatar
 
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
Ja das ist genau das "Problem", ich bin ein wenig überwältigt von den Möglichkeiten, es wird in meinem Buch auch gesagt, dass wenn das Thema 'Pointer' kein Problem mehr ist, die Sprache 'C' es auch nicht mehr sein wird.

MfG Joshi
TeraTroll is offline  
Old 02/24/2015, 16:22   #8
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Zeiger sind an sich ziemlich einfach. Betrachte Zeiger nicht als schnieken neuen Datentypen, sondern einfach als 32 bzw. 64 Bit Wort. Du kannst mit Zeigern arbeiten wie mit jedem anderen Wort auch, du kannst es Multiplizieren, Modulieren, Dividieren, Addieren und Subtrahieren, Shiften, And, Or und Not drauf anwenden.
Auf der einen Seite hast du also ein Wort. Auf der anderen Seite Bietet C die Möglichkeit direkt auf den Speicher an einer Bestimmten Adresse zuzugreifen. Um mit Adressen zu Arbeiten muss man diese Irgendwo zwischenspeichern, und Adressen sind nun mal 32 oder 64 Bit Wörter. Also nutzt man Zeiger einfach nur als Variable um Adressen zwischen zu Speichern.

Du könntest auch ein normales Wort nehmen (unsigned long) aber Zeiger bieten durch ihren typen (Char, Integer, Single, etc) noch die Information, wie groß das Feld ist und wie der Typ ausgewertet werden soll (Char als Wort, Integer als Signierte Zahl, Single als IEEE 754).

Ansonsten gilt nur noch: Kellerspeicher wird automatisch zugewiesen und wieder Bereinigt, Haldenspeicher musst du es selbst erledigen mit malloc und free. Speicher wird immer in 8 Bit Blöcken (Registern) bereitgestellt, die Adressen werden pro 8 Bit um 1 erhöht. Greife nie auf umzugewiesenen Speicher zu, und lasse nie Speicher nicht freigegeben.
(Ziemlich einfach erklärt)

Mir hatte das zu Anfang sehr geholfen Zeiger einfach als Wörter zu betrachten, und die Methode auf Speicher über die Adresse zuzugreifen als "eigenständig" und von Pointern unabhängig zu betrachten
warfley is offline  
Old 02/24/2015, 18:44   #9
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by warfley View Post
Zeiger sind an sich ziemlich einfach. Betrachte Zeiger nicht als schnieken neuen Datentypen, sondern einfach als 32 bzw. 64 Bit Wort. Du kannst mit Zeigern arbeiten wie mit jedem anderen Wort auch, du kannst es Multiplizieren, Modulieren, Dividieren, Addieren und Subtrahieren, Shiften, And, Or und Not drauf anwenden.
Auf der einen Seite hast du also ein Wort. Auf der anderen Seite Bietet C die Möglichkeit direkt auf den Speicher an einer Bestimmten Adresse zuzugreifen. Um mit Adressen zu Arbeiten muss man diese Irgendwo zwischenspeichern, und Adressen sind nun mal 32 oder 64 Bit Wörter. Also nutzt man Zeiger einfach nur als Variable um Adressen zwischen zu Speichern.

Du könntest auch ein normales Wort nehmen (unsigned long) aber Zeiger bieten durch ihren typen (Char, Integer, Single, etc) noch die Information, wie groß das Feld ist und wie der Typ ausgewertet werden soll (Char als Wort, Integer als Signierte Zahl, Single als IEEE 754).

Ansonsten gilt nur noch: Kellerspeicher wird automatisch zugewiesen und wieder Bereinigt, Haldenspeicher musst du es selbst erledigen mit malloc und free. Speicher wird immer in 8 Bit Blöcken (Registern) bereitgestellt, die Adressen werden pro 8 Bit um 1 erhöht. Greife nie auf umzugewiesenen Speicher zu, und lasse nie Speicher nicht freigegeben.
(Ziemlich einfach erklärt)

Mir hatte das zu Anfang sehr geholfen Zeiger einfach als Wörter zu betrachten, und die Methode auf Speicher über die Adresse zuzugreifen als "eigenständig" und von Pointern unabhängig zu betrachten
nicht so viel kiffen?
srsly, dafuq?
Dr. Coxxy is offline  
Thanks
2 Users
Old 02/24/2015, 18:57   #10
 
TeraTroll's Avatar
 
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
Wie meinst du das Coxxy?
TeraTroll is offline  
Old 02/24/2015, 20:31   #11

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Coxxy möchte damit ausdrücken, dass jemand, der Kellerspeicher und Haldenspeicher in einem Text verwendet, entweder Informatik-Ersti oder bekifft (alternativ auch beides) ist.

Quote:
Ja das ist genau das "Problem", ich bin ein wenig überwältigt von den Möglichkeiten, es wird in meinem Buch auch gesagt, dass wenn das Thema 'Pointer' kein Problem mehr ist, die Sprache 'C' es auch nicht mehr sein wird.
Ja, das Thema Pointer sieht sehr komplex aus, wenn man es aber mal gerafft hat und versteht, was im Hintergrund passiert und wie alles zusammenhängt, ist es nur ein weiterer Datentyp.
snow is offline  
Old 02/24/2015, 20:35   #12
 
TeraTroll's Avatar
 
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
Für mich besteht momentan hauptsächlich das Problem, dass ich mit dem Syntax bzw. den richtigen Zeichen durcheinander komme ('&' und '*') wann ich welches verwende und wann und wie.
Ich denke das ist eine reine Lernsache jedoch trotzdem komplex
Okay die Begriffe sagen mir momentan noch (gar-)nichts.
TeraTroll is offline  
Old 02/24/2015, 21:17   #13
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Quote:
Originally Posted by TeraTroll View Post
Ahhh okay, danke. Kannst du mir eines empfehlen?
Quote:
Originally Posted by snow View Post
soll Windows via C/C++ ganz gut sein, Practical Reverse Engineering bietet auch einen breiten Einstieg in verschiedene Themen, unter anderem wie der Windows Kernel arbeitet (inklusive Kontext-Switching und Addressräume).
Ich kann snows Vorschläge nur unterschreiben. Ich setze mich derweil ebenfalls mit beiden Titeln auseinander. Jeffery Richter und Christophe Nasarre haben mit dem Titel "Windows via C/C++" (5th edition - bei mir) ganze Arbeit geleistet. Auch das angesprochene Thema "DLL Injection and API Hooking" sowie "Memory Management" bleiben nicht unbehandelt. Aber auch viele andere Bereiche werden bestens dargestellt und erklärt. Zu letztere kann ich bis dato nur wenig sagen, weil ich erst gerade angefangen habe. €: "Windows Internals 6th edition" - soll auch ganz gut sein.
Logtetsch is offline  
Old 02/24/2015, 21:38   #14
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Quote:
Coxxy möchte damit ausdrücken, dass jemand, der Kellerspeicher und Haldenspeicher in einem Text verwendet, entweder Informatik-Ersti oder bekifft (alternativ auch beides) ist.
Mein Ziel war es nur mal diese Beiden dinge Anzusprechen, ich wollte da nicht groß drauf eingehen. Bekifft nicht, aber jedesmal wenn ich Kaffee trinke ist das bei mir um Welten schlimmer, ich vertrage einfach kein Koffein :P
warfley is offline  
Old 02/24/2015, 22:30   #15
 
TeraTroll's Avatar
 
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
Haha damit hast du gerade indirekt zugegeben, dass die THC mehr zusagt :P

B2t:
Danke sehr Logtesch, kannst du mir sagen wie viel "Vorwissen" du hast, bzw. wie viel man benötigt um solch(noch komplexeren) Themen behandeln zu können?
TeraTroll is offline  
Reply


Similar Threads Similar Threads
Frage: Wie findet man zB UG Pointer?Speed pointer?
03/30/2010 - Kal Online - 2 Replies
kann mir einer sagen wie man UG/Speed pointer finden kann usw^^´ß#



All times are GMT +1. The time now is 20:40.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.