Register for your free account! | Forgot your password?

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

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

Advertisement



Dll Memory?

Discussion on Dll Memory? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Terrat's Avatar
 
elite*gold: 130
Join Date: Apr 2012
Posts: 1,173
Received Thanks: 670
Dll Memory?

Hallo,
ich schreibe gerade mein eigenes Plugin für ein Spiel. Meine Frage ist nun wie kann ich vectoren erstellen und verwalten ohne das das Zielprogramm mit vectoren arbeiten kann?

Bsp.
Server soll es so callen:
Funktion in der Dll erstellt vector
z.B. push_back (handle von den vector) ?

wie realisiere ich so etwas ?
Ich meine würde am liebsten gleich Vector im Server nehmen aber da dies dort nicht exestiert will ich mir eigene Möglichkeiten suchen.
Terrat is offline  
Old 11/12/2014, 10:37   #2


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Wieso existieren in der Zielumgebung keine vectors?
MrSm!th is offline  
Thanks
1 User
Old 11/12/2014, 18:24   #3
 
Terrat's Avatar
 
elite*gold: 130
Join Date: Apr 2012
Posts: 1,173
Received Thanks: 670
Quote:
Originally Posted by MrSm!th View Post
Wieso existieren in der Zielumgebung keine vectors?
Weil ich die Ziel Dll später in einer Script sprache nutzen will die keine Array hat die keine feste Größe haben, sprich es exestiert dort nicht so etwas wie ein Vector.

Später soll das ganze wie folgt aussehen:

(Server lädt plugin)
(....)
(Script callt funktionen)
Code:
new V_Vectortest;

....
I_CreateVector(V_Vectortest);//<- soll den <vector> erstellen und die adresse in V_Vectortest schreiben.
....
I_AddVectorItem(V_Vectortest);//<- soll jetzt halt !nur! mit hilfe  der Adresse die in V_Vectortest drin ist auf die Funktion zugreifen, sprich das geht ja noch einfach mit push_back ...
Meine Überlegung werde ich hier immer mal posten:
Code:
.....
#include <vector>

//funktion zum erstellen
void I_CreateVector(DWORD Adress){
	std::vector<int> Vectoradress;
	Adress = (DWORD)&Vectoradress;
}
So funktioniert es ja aber leider auch nicht:
Code:
int I_AddVectorItem(DWORD Adress, int value){

	(std::vector)Adress.push_back(value);
	return 1;
}
Terrat is offline  
Old 11/12/2014, 18:45   #4
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Wie wäre es wenn du erstmal sagen würdest welche Scriptsprache du verwendest, vielleicht muss man ja gar keinen Wrapper schreiben.
​Tension is offline  
Thanks
1 User
Old 11/12/2014, 18:48   #5
 
Terrat's Avatar
 
elite*gold: 130
Join Date: Apr 2012
Posts: 1,173
Received Thanks: 670
Quote:
Originally Posted by ​Tension View Post
Wie wäre es wenn du erstmal sagen würdest welche Scriptsprache du verwendest, vielleicht muss man ja gar keinen Wrapper schreiben.
Pawno *_* ;D xd. da muss man das hab mich da schon informiert
Nun noch mal zurück wie kann ich nun über den Parameter Adress, die Vector klasse nutzen?
Terrat is offline  
Old 11/12/2014, 22:15   #6
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Ansatz 1:
Code:
reinterpret_cast<std::vector<int>*>(Adress)->push_back(value);
Ansatz 2:
Code:
std::vector<int>* pVector = reinterpret_cast<std::vector<int>*>(Adress);
pVector->push_back(value);
Bevor du dies tust, solltest du natürlich prüfen ob Adress eine gültige Adresse aufzeigt.
Logtetsch is offline  
Thanks
1 User
Old 11/12/2014, 22:15   #7
 
Terrat's Avatar
 
elite*gold: 130
Join Date: Apr 2012
Posts: 1,173
Received Thanks: 670
Quote:
Originally Posted by Logtetsch View Post
Ansatz 1:
Code:
reinterpret_cast<std::vector<int>*>(Adress)->push_back(value);
Ansatz 2:
Code:
std::vector<int>* pVector = reinterpret_cast<std::vector<int>*>(Adress);
pVector->push_back(value);
Werde ich gleich mal probieren dankö
Keine fehler beim compilen aber beim debuggen / runnen:

Code:
>	Vectorplugintest.exe!std::vector<int,std::allocator<int> >::_Inside(const int * _Ptr) Zeile 1583	C++
 	Vectorplugintest.exe!std::vector<int,std::allocator<int> >::push_back(const int & _Val) Zeile 1244	C++
 	Vectorplugintest.exe!I_AddVectorItem(unsigned long Adress, int value) Zeile 13	C++
 	Vectorplugintest.exe!main() Zeile 22	C++
 	[Externer Code]	
 	[Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für kernel32.dll]
Code:
Code:
#include <iostream>
#include <Windows.h>
#include <vector>
int I_CreateVector(DWORD Adress){
	std::vector<int> Vectoradress;
	Adress = (DWORD)&Vectoradress;
	return 1;
}
int I_AddVectorItem(DWORD Adress, int value){
	reinterpret_cast<std::vector<int>*>(Adress)->push_back(value);
	//std::vector<int>* pVector = reinterpret_cast<std::vector<int>*>(Adress);
	//pVector->push_back(value);
	return 1;
}
int I_GetVectorItem(DWORD Adress, int item){
	int i_return=0;
	return i_return;
}
int main(){
	DWORD Adress=0x000000;
	I_CreateVector(Adress);
	I_AddVectorItem(Adress,1);
	while (true)
		Sleep(1);
	return 0;
}
Terrat is offline  
Old 11/12/2014, 22:33   #8

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
Du solltest dir I_CreateVector noch mal anschauen, da sind mehrere Fehler.
Zum einen ist es keine gute Idee, eine Adresse einer lokalen Variable zurückzugeben, zum anderen solltest du dir call by value / reference / pointer mal anschauen.
snow is offline  
Thanks
1 User
Old 11/12/2014, 22:38   #9
 
Terrat's Avatar
 
elite*gold: 130
Join Date: Apr 2012
Posts: 1,173
Received Thanks: 670
edit:
habs mit static versucht in der Funktion klappt jetzt auch kann aber nur 1 mal halt erstellen hat wer ne idee ?
Terrat is offline  
Old 11/12/2014, 23:00   #10
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Ich verstehe deine Aussage nicht. Versuch dich beim nächsten mal bitte besser auszudrücken und ohne neuen Code kann man dir nur wenig helfen.

Habe die Funktionen etwas umgeschrieben :
Code:
int I_CreateVector(DWORD* Adress){
	if (Adress == nullptr) return FALSE;
	std::vector<int>* pVector = new std::vector<int>();
	*Adress = reinterpret_cast<DWORD>(pVector);
	return TRUE;
}

int I_AddVectorItem(DWORD* Adress, int value){
	if (Adress == nullptr) return FALSE;
	reinterpret_cast<std::vector<int>*>(*Adress)->push_back(value);
	return TRUE;
}

int I_GetVectorItem(DWORD* Adress, int index){
	if (Adress == nullptr) return FALSE;
	return reinterpret_cast<std::vector<int>*>(*Adress)->at(index);
}

void I_FreeVector(DWORD* Adress){
	if (Adress == nullptr) return; //Exception?!
	delete reinterpret_cast<std::vector<int>*>(*Adress);
	*Adress = 0x0;
}

int main(){
	DWORD Adress = 0x0;
	I_CreateVector(&Adress);
	
	for (int i = 0; i < 3; i++)
		I_AddVectorItem(&Adress, i);

	for (int i = 0; i < 3; i++)
		std::cout << "Index: " << i << " Value: " << I_GetVectorItem(&Adress, i) << std::endl;

        I_FreeVector(&Adress);
	return 0;
}
Logtetsch is offline  
Thanks
1 User
Old 11/12/2014, 23:03   #11
 
Terrat's Avatar
 
elite*gold: 130
Join Date: Apr 2012
Posts: 1,173
Received Thanks: 670
Quote:
Originally Posted by Logtetsch View Post
Ich verstehe deine Aussage nicht. Versuch dich beim nächsten mal bitte besser auszudrücken und ohne neuen Code kann man dir nur wenig helfen.

Habe die Funktionen etwas umgeschrieben :
Code:
int I_CreateVector(DWORD* Adress){
	std::vector<int>* pVector = new std::vector<int>();
	*Adress = reinterpret_cast<DWORD>(pVector);
	return 1;
}

int I_AddVectorItem(DWORD* Adress, int value){
	reinterpret_cast<std::vector<int>*>(*Adress)->push_back(value);
	return 1;
}

int I_GetVectorItem(DWORD* Adress, int index){
	return reinterpret_cast<std::vector<int>*>(*Adress)->at(index);
}

int main(){
	DWORD Adress = 0x0;
	I_CreateVector(&Adress);
	
	for (int i = 0; i < 3; i++)
		I_AddVectorItem(&Adress, i);

	for (int i = 0; i < 3; i++)
		std::cout << "Index: " << i << " Value: " << I_GetVectorItem(&Adress, i) << std::endl;

	return 0;
}
Du bist ein Engel
Terrat is offline  
Old 11/12/2014, 23:08   #12
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Hab den Code etwas umgeschrieben. Siehe Edit vom Vorpost.
Call by Reference →
Pointer Dereferenzierung →
Logtetsch is offline  
Thanks
1 User
Old 11/12/2014, 23:18   #13

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
Hier mal meine Version:

Code:
#include <iostream>
#include <Windows.h>
#include <vector>

int I_CreateVector(DWORD_PTR &address)
{
	address = reinterpret_cast<DWORD_PTR>(new std::vector<int>);
	return 1;
}

int I_AddVectorItem(DWORD_PTR address, int value)
{	
	auto &vector = *reinterpret_cast<std::vector<int> *>(address);
	vector.push_back(value);
	return 1;
}

int I_GetVectorItem(DWORD_PTR address, int index)
{
	auto &vector = *reinterpret_cast<std::vector<int> *>(address);
	return vector[index];
}
int main()
{
	DWORD_PTR address = 0x00000000;
	
	I_CreateVector(address);
	
	for (auto i : { 1, 3, 5, 7 })
	{
		I_AddVectorItem(address, i);
	}
	
	for (int i = 0; i != 4; ++i)
	{
		std::cout << "Item: " << I_GetVectorItem(address, i) << std::endl;
	}
}
Pointer übergeben ist uncool.
snow is offline  
Thanks
1 User
Old 11/12/2014, 23:30   #14
 
Terrat's Avatar
 
elite*gold: 130
Join Date: Apr 2012
Posts: 1,173
Received Thanks: 670
Quote:
Originally Posted by snow View Post
Hier mal meine Version:

Code:
#include <iostream>
#include <Windows.h>
#include <vector>

int I_CreateVector(DWORD_PTR &address)
{
	address = reinterpret_cast<DWORD_PTR>(new std::vector<int>);
	return 1;
}

int I_AddVectorItem(DWORD_PTR address, int value)
{	
	auto &vector = *reinterpret_cast<std::vector<int> *>(address);
	vector.push_back(value);
	return 1;
}

int I_GetVectorItem(DWORD_PTR address, int index)
{
	auto &vector = *reinterpret_cast<std::vector<int> *>(address);
	return vector[index];
}
int main()
{
	DWORD_PTR address = 0x00000000;
	
	I_CreateVector(address);
	
	for (auto i : { 1, 3, 5, 7 })
	{
		I_AddVectorItem(address, i);
	}
	
	for (int i = 0; i != 4; ++i)
	{
		std::cout << "Item: " << I_GetVectorItem(address, i) << std::endl;
	}
}
Pointer übergeben ist uncool.
*_* werde sie mir morgen mal angucken. In Pawno exestiert DWORD garnicht, kann ich jetzt eigentlich DWORD einfach als (int) returnen und danach wieder zusammenkratzen ?
Terrat is offline  
Old 11/12/2014, 23:32   #15
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Quote:
Originally Posted by snow View Post
Pointer übergeben ist uncool.
Dreckig und durchaus nicht die beste opportunity - aber dennoch funktional

Quote:
Originally Posted by Dreamsläps View Post
In Pawno exestiert DWORD garnicht, kann ich jetzt eigentlich DWORD einfach als (int) returnen und danach wieder zusammenkratzen ?
DWORD ist nur ein typedef für unsigned int. Du kannst einen DWORD auch als int zurückgeben, jedoch könntest du dabei wichtige Informationen verlieren.
Logtetsch is offline  
Reply


Similar Threads Similar Threads
[VB]Write Memory bzw Read Memory
06/26/2010 - .NET Languages - 8 Replies
Hi Ich hab das TuT von *Guidman* benütz um einen hack zu machen. So aber nun hab ihc ein paar fragen könnte man memory teil kürzer machen und am besten wie kann man das selber machen weil ich will nihct immer C&P machen. Und zu Read Memory kann man das auch machen das ein Label immer die Bestimmte Ahnzahl angiebt von dem Pointer?.(Wenn das Read Memory ist ?) Bitte helf mir Danke
Quick Memory Editor - Alternative Memory Hacking Software
11/21/2009 - Cabal Hacks, Bots, Cheats, Exploits & Macros - 11 Replies
This might be detected or not by GameGuard, I have not tested this on Official servers however it worked perfectly fine on other private servers. http://imagenic.net/images/x0jxwzwpg2zxmkdtcf36.p ng This is just an alternative memory editing tool. Press thanks if this helps. Remember, scan before using this. Cause its 5.5MB.
Fragen Zur Memory!!!(Auslesen von Spawn/Memory)
12/31/2008 - Guild Wars - 3 Replies
hey leute, ich wollte mal einen bot schreiben und nun bin ich ganz verwirrt. könnte mir jmd bitte schritt für schritt erklären wie das mit Memory auslesen, benutzen und der Spawnpointer funktioniert. Ich wär sehr dankbar wenn jmd kontakt mit mir aufnehmen würde... und sobald der bot fertig ist bekommt der ihn natürlicherweise umsonst:D ICQ: 481799773 oder hier im forum
Sample of memory search in PW for memory bot learner
02/25/2008 - Perfect World - 6 Replies
im learning how to make a memory bot as of know.. im expirience in pixel botin but the mob seacrh for it is quite slow.. ill be using au3 and the include nomadmemory.au3 from nomad in au3 forum. credits to him... this is my sample of my memory script: it will be good for who wants to learn memory botin and has no available bot in their respective server #include <Memory.au3> Global $Pointer = d pointer in 4bytes in whch its store the modId when clicked just search in hex format in 4bytes...



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


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.