Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 20:31

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

Advertisement



Writeinteger - Der Konstantenausdruck ist in Type "Integer" nicht darstellbar.

Discussion on Writeinteger - Der Konstantenausdruck ist in Type "Integer" nicht darstellbar. within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
dragonheart11's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 567
Received Thanks: 243
Writeinteger - Der Konstantenausdruck ist in Type "Integer" nicht darstellbar.

Moin Leute,

Ich habe ein problem bei einem Trainer den ich grad erstelle (das hat ich noch nie o.o)

Ich benutze das Write-/Readinteger Module:

Das Problem die adressen die ich sonst über Cheat Engine finde 8 zeichen lang sind nun sind meine adressen 9 zeichen lang
jetzt kommt bei writeinteger der fehler: "Der Konstantenausdruck ist in Type "Integer" nicht darstellbar."

Hier die writeinteger zeile:
Wenn ich jetz ein zeichen von der adresse entferne dann kommt der fehler jnicht mehr aber es ist ja nicht mehr die selbe adresss(ist ja klar)

(PROCESS hab ich nur reingeschrieben, weil es ja wahrscheinlich uninteressant ist für was ich den trainer mache :P!)

Ich bedanke mich schonmal an alle die sich für mich hier Zeit nehmen !
dragonheart11 is offline  
Old 10/12/2014, 16:09   #2


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Und was sagt dir die Fehlermeldung? Das der Typ Integer zu klein für den Wert ist und da können wir hier was tun? Gibt ja genug Datentypen die du nutzen kannst.
Mostey is offline  
Old 10/12/2014, 16:11   #3
 
dragonheart11's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 567
Received Thanks: 243
Quote:
Originally Posted by Mostey View Post
Und was sagt dir die Fehlermeldung? Das der Typ Integer zu klein für den Wert ist und da Speicheradressen in den meisten Fällen nicht negativ sein werden, können wir hier was tun?
hab grad was gefunden nämlich einen biginteger nutzen
dragonheart11 is offline  
Old 10/12/2014, 16:17   #4


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by dragonheart11 View Post
hab grad was gefunden nämlich einen biginteger nutzen
Wieso BigInteger? UIntPtr reicht völlig aus, sofern ich weiß wird die Pointergröße bei .NET sowieso automatisch anhand der verwendeten Architektur gesetzt.
Mostey is offline  
Old 10/12/2014, 17:52   #5
 
dragonheart11's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 567
Received Thanks: 243
Quote:
Originally Posted by Mostey View Post
Wieso BigInteger? UIntPtr reicht völlig aus, sofern ich weiß wird die Pointergröße bei .NET sowieso automatisch anhand der verwendeten Architektur gesetzt.
soweit so gut nur beim ausführen vom writeinteger kommt nun:
"Die arithmetische Operation hat einen Überlauf verursacht."
(Dividieren sie nicht durch 0)
dragonheart11 is offline  
Old 10/12/2014, 19:09   #6


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Und wieso hörst du nicht auf die Exception? In dem Code ist sowieso nirgends eine sichtbare Division.
Mostey is offline  
Old 10/12/2014, 19:46   #7
 
dragonheart11's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 567
Received Thanks: 243
Quote:
Originally Posted by Mostey View Post
Und wieso hörst du nicht auf die Exception? In dem Code ist sowieso nirgends eine sichtbare Division.
wenn ich wüsste wo er dividiert und wenn nicht durch 0 dividieren durch was dann?
dragonheart11 is offline  
Old 10/12/2014, 20:09   #8
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Bei .net gibt es doch einen Stacktrace und jede Exception bekommt den zugewiesen. Guck dir den an und Debugge dein Programm dann. Hellsehen können wir nicht.
th0rex is offline  
Old 10/12/2014, 20:21   #9
 
dragonheart11's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 567
Received Thanks: 243
Quote:
Originally Posted by omitma View Post
Bei .net gibt es doch einen Stacktrace und jede Exception bekommt den zugewiesen. Guck dir den an und Debugge dein Programm dann. Hellsehen können wir nicht.
Hab mal Call Stack gemacht beim debuggen, das kam dabei raus:
> Call of Duty Ghosts Sp Hack.exe!Call_of_Duty_Ghosts_Sp_Hack.Main.iammo_Ti ck(Object sender = {Interval = 1}, System.EventArgs e = {System.EventArgs}) Zeile 122 Basic

Diese Zeile: WriteInteger("iw6sp64_ship", &H143E15C94, 999)

Hier nochmal der neue code mit dem UIntPtr("ByVal Adress as UIntPtr"):

EDIT: Fehler mit System.Environment.Stacktrace ausgelesen(obwohl ich hier woll was falsch gemacht habe beim auslesen):
dragonheart11 is offline  
Old 10/12/2014, 21:00   #10


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Damit kann man nicht viel anfangen, omitma meint den StackTrace der Exception die geworfen wird. Was bringt uns denn der StackTrace bis zu der aufrufenden Funktion? Das wissen wir doch schon.

Nur weil man keine Division sieht, heißt das noch lange nicht, das keine gibt.

Code:
vbuffer = Value
WriteProcessMemory1(hProcess, hAddress, CUInt(vbuffer), nsize, 4)
WriteProcessMemory1 könnte zum Beispiel vbuffer intern dividieren und wenn der Wert 0 ist...

Ich weiß eh nicht was du da überhaupt für'n Code hast. Zum .NET Framework gehört er jedenfalls nicht.
Mostey is offline  
Old 10/13/2014, 14:55   #11
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Problembehebung beginnt man erst mal damit dass man seinen code ausmistet, denn das was da oben steht ist alles andere als sauber.
1. Du übergibst die Adresse und den Wert als Integer, Wandelst sie in string um, um sie dann wieder in integer umzuwandeln (ich gehe einfach mal von aus, dass die adresse nicht als string gefordert wird, wenn nicht ist es nur für den Buffer unnötig)
2. beim übertragen in den string wirfst du dem einfach die integer Variable hin, wozu benutzt du dann überhaupt variablen typen, benutz doch einfach die ToString methode, das tut nicht weh, und hilft beim debuggen eine menge wenn du weißt was wo in welchen typ gesteckt wurde.
Du Convertierst da zwischen den typen hin und her, da verliert man ja den überblick
3. du übergibst als größe den standart wert 8, aber soweit ich mich erinnern kann ist standart Integer typ größe, 4. wenn du dir überhaupt nicht sicher bist nimm sowas wie die anzahl der elemente die BitConverter.GetBytes rausgibt (gibt bestimmt auch irgendwo eine SizeOf methode im .Net).

Zwar ist das vielleicht nicht die direkte lösung deines problems, aber so wird das mal ein bisschen übersichtlicher mit den ganzen typen, und genau da liegt dein problem ja auch
warfley is offline  
Thanks
1 User
Old 01/02/2015, 19:30   #12
 
elite*gold: 0
Join Date: Jan 2011
Posts: 3
Received Thanks: 0
Hi, gibts es zu dem Problem eine Lösung?
Ich möchte mit der Funktion ReadInteger eine Memoryadresse auslesen, diese ist jedoch nicht wie "gewöhnliche" adressen 8 stellig, sondern 9 stellig. Daher ist das Umwandeln in den von der Funktion geforderten Integer-Wert nicht möglich.
maggesssss is offline  
Old 01/03/2015, 18:32   #13
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Quote:
Hi, gibts es zu dem Problem eine Lösung?
Ich möchte mit der Funktion ReadInteger eine Memoryadresse auslesen, diese ist jedoch nicht wie "gewöhnliche" adressen 8 stellig, sondern 9 stellig. Daher ist das Umwandeln in den von der Funktion geforderten Integer-Wert nicht möglich.
Lass mich dir mal die Geschichte vom Hauptspeicher, den 1 Bit Registern, und den aus diesen zusammengesetzten größeren Speicherregistern. Bzw, warum mit ein wenig wenig drüber nachdenken deine Frage sich komplett selbsterklärt.

Der Hauptspeicher deines PC's besteht aus sehr vielen kleinen Speicherbausteinen, so genannten 1 Bit Registern. Die genaue Funktionsweise dessen tut hier allerdings nichts zur Sache. 1 Bit register können aber, wie der Name schon sagt nur ein Bit speichern, also entweder 0V oder 3,3V (0 und 1) zurückgeben.
Um jetzt größere Daten wie etwa Integer zu Speichern baut man aus den Einzelnen Bits Wörter, Kombinationen aus 0..1. Diese Wörter können dann, z.B. über die Darstellung des Binär-Systems als Zahlen dargestellt werden oder mit anderen Darstellungsmethoden andere Werte repräsentieren.

Alles Dreht sich um diese Wörter. Und das erste Wichtige was du Wissen solltest ist dass diese Wörter eine feste Größe haben. Also eine feste Anzahl an Buchstaben. Will man einen Single speichern, so benötigt man ein 32 Bit Wort. Für einen Double 64bit, für einen Extended 80 bit. Solange die Größe bekannt ist, ist komplett egal was dort drinsteht, ob es jetzt eine Zahl im IEEE 754 Format oder ein 2er Kompliment ist, dem Ram ist das Komplett egal. Es sind alles nur Wörter. Als Zahl Interpretiert kann ein n-Bit Wort die Zahlen 0 bis 2^(n-1) im Binärsystem darstellen.

Im Pc werden diese Wörter allerdings nicht als komplette Zahlen behandelt, sondern jeder Buchstabe wird einzeln als Boolscher Wert gehandelt und auf diesen Werten wird dann mit Boolschen Funktionen Operiert.

Die zentrale Rolle hierbei spielt das Addierwerk, welches mit 2 Wörtern die Addition im Binärsystem ausführt. Dabei gibt es mehrere Konzepte für Addierwerke, vor allem das Parallele, das Serielle und das von Neumann addierwerk.
Sowohl das Parallele als auch das von Neumann Addierwerk benötigt n Addierbausteine um n-Stellige Wörter zu addieren. Das Parallel Addierwerk kommt zwar mit nur einem Volladierer aus, benötigt aber immer n+1 Arbeitstakte, was bei den anderen nur worst case Szenario ist, weswegen dieses nicht zum Einsatz kommt.

Langer Rede kurzer Sinn: für n-stellige Wörter braucht man einen n-elementigen Addierer.
Daher gibt es verschiedene Architekturen (z.B. 8 bit oder 32 oder 64 bit) die mit Wörtern fester länge arbeiten.

Zurück zum Hauptspeicher. Wie Oben erwähnt werden diese Wörter Buchstabe für Buchstabe in 1 Bit Registern geschrieben, welche dann einfach Einzel ausgelesen werden, und die Einzel Bits aneinander gereit so dass sich das n-Stellige Wort ergibt.

Um möglichst viele Daten zu speichern werden die Daten so zusagen in einer Tabelle gespeichert, aus einzelnen Zeilen und Spalten.
Um auf eine Jeweilige Zeile und spalte zuzugreifen werden so genannte Adressen genutzt. Adressen sind wiedermal nichts Anderes als Wörter aus L:={0, 1}, welche dann mit Boolschen Funktionen Daten aus der Tabelle lesen, und in diese schreiben zu können.

Zur Adressierung gibt es 2 wichtige Konzepte. Zum einen so, dass die Tabelle genau so viel Spalten wie Reihen hat. Bei n Spalten und n Reihen könnten dann n^2 Bits gesichert werden. Die Adresse besteht selbst aus 2 n-Bit Wörtern, die genau angeben welche Reihe und welche Spalte. Diese werden nacheinander an den Speicher übergeben, und dieser weiß dann um welche Zelle es sich handelt. Allerdings kann man damit nur auf ein Bit nach dem Anderen zugreifen.

Die nächste Option, nur eine Kleine Anzahl an Spalten, dafür eine größere Anzahl an Reihen sagen wir mal n Reihen und x Spalten. Dann wird über die Adresse nur die Reihe geliefert, und dann werden alle x Spalten aus dieser Reihe ausgegeben, und somit hat man direkt das x-Bit wort.


Warum erzähle ich das alles nun, hier kommt die Poin*te:
Wie oben schon erklärt muss das Addierwerk statisch mit einer Festen Anzahl an Addierern auf n-stellige Wörter eingestellt sein, daher gibt es die verschiedenen Architekturen z.b. 32 bit und 64 bit. So eine Architektur betrifft allerdings nicht nur das addierwerk, sondern viel mehr das Komplette system wird auf eine Architektur angepasst. Bei einem 64 bit System werden auch 64 bit Adressen verwendet, um auf 2^64 Speicheradressen die je 8 bit Wörter auslesen können, und diese dann zu größeren bzw kleineren Wörtern noch zusammenfügen können. Daher kommt auch zu Stande das 32 bit nur 4 GB Ram handeln kann (2^32 Adressen, pro Adresse 8 Bit sind c.a. 34 Bit = 4 GByte)



Zu deinem Problem:
Du sagst gewöhnliche Adressen sind 8 Stellig, also 8 Stellige Wörter im Hexadezimalsystem. das sind 8*4 stelligen Wörter im Binär system, also 32 Bit Wörter.

Wenn die Adresse 9 Stellen allerdings hat, woran könnte dass dann wohl liegen (unter Anbetracht dessen dass du wohl kaum ein 36 bit system haben wirst).
warfley is offline  
Thanks
1 User
Reply

Tags
konstantenausdruck, trainer, writeinteger




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


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.