Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Voidpointer ? () ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
16.09.2008, 15:12 Uhr
huckleberry



Hallo Leute,

hier ein Auszug:

Code:

unsigned char aChar[] = "\xEB\x54\x8B\x75";
...
int main()
{
    void (*pVoidZeiger)();
    *(int*)&pVoidZeiger= aChar;
    ....



------------------------------------------------
FRAGE: Was bewirken
1. void (*pVoidZeiger)();
2. *(int*)&pVoidZeiger= aChar;
------------------------------------------------
1. Warum nochmal "()" am Ende?
1. Hier wird ein Pointer vom Typ void erstellt
2. Überschreibt die Adresse von pVoidZeiger?
2. Was soll "*(int*)" ?!?!?!? Muss denn nicht aChar gecasted werden? mit "....(int*)aChar;"

thnx und mfg huck
--
There are 10 types, those who understand binary and those who don't...

Dieser Post wurde am 16.09.2008 um 15:37 Uhr von huckleberry editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.09.2008, 16:48 Uhr
RedEagle



Es handelt sich bei void (*pVoidZeiger)(); um einen zeiger auf eine Funktion


C++:
*(int*)&pVoidZeiger= aChar;

Hier wird dem Zeiger eine adresse zugewiesen - 0x758B45EB;

Dadurch kann man die Funktion, die an 0x758B45EB liegt aufrufen..

C++:
pVoidZeiger();

--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.09.2008, 17:03 Uhr
huckleberry




Zitat von RedEagle:
Es handelt sich bei void (*pVoidZeiger)(); um einen zeiger auf eine Funktion


Achsooo jetzt wird einiges klar.

Ich bekomm da eine Fehlermedlungen:

operands of = have illegal types 'int' and 'pointer to char'
für die Zeile:
*(int*) &pVoidZeiger= aChar;

aChar beschriebt ja eine Funktion, die er, wie du sagtest, später mit "pVoidZeiger()" ausführen soll. aChar war ja weiterhin:

Code:
unsigned char aChar[] = "\xEB\x54\x8B\x75";

Sollte ich das aChar nicht zu (int*) casten? Oder macht der das automatisch?

*(int*) &pVoidZeiger= (int *) &aChar;

Hierbei kommt die gleiche Fehlermeldung.

Ich compiliere mit lcc und eingebunden habe ich:
#include <stdio.h>
#include <string.h>

Ich hoffe es feht nichts?

mfg unf thnx huck
--
There are 10 types, those who understand binary and those who don't...

Dieser Post wurde am 16.09.2008 um 17:05 Uhr von huckleberry editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.09.2008, 17:12 Uhr
RedEagle



mit...

C++:
*(int*)&aChar;

... wird gehen... auch wenn die ganze Zeile noch wirrer aussieht...

Hier eine vieleicht schönere alternative...

C++:
pVoidZeiger= (void(*)()) *(long*)aChar;


Am besten packt man die adresse aber direkt in eine Integer (am besten long verwenden... Ist sicherer)

C++:
long x=0x758B54EB;
pVoidZeiger= (void(*)()) x;

--
MFG RedEagle

Dieser Post wurde am 16.09.2008 um 17:13 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.09.2008, 17:27 Uhr
huckleberry



cool, die schönere alternative hat die Fehlermeldung beseitigt, thnx.

Und schliesslich:
missing prototype
für den Aufruf am ende:

Code:
pVoidZeiger();


thnx und mfg huck
--
There are 10 types, those who understand binary and those who don't...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.09.2008, 18:01 Uhr
RedEagle



Du kannst die Funktion nur da aufrufen, wo der Zeiger gültig ist.

C++:
int main()
{
     void (*pVoidZeiger)();
     //...
     pVoidZeiger(); //Funktioniert
     //...
}

void fnc()
{
pVoidZeiger(); //Funktioniert nicht, da unbekannt
}

--
MFG RedEagle

Dieser Post wurde am 16.09.2008 um 18:01 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.09.2008, 18:05 Uhr
0xdeadbeef
Gott
(Operator)


Irgendwie ist mir dieses ganze Vorhaben suspekt. Die Technik scheint mir, von bösartigen Absichten mal abgesehen, ziemlich unnütz, und die einzige Adresse, die google mir zu der Speicheradresse ausspuckt, hat bezeichnenderweise ein "malware-analysis" im Namen.

Erklär mir bitte, was genau du da vorhast; ansonsten sehe ich mich gezwungen, den Thread zu dichten. Hilfe zum Virenschreiben leisten wir hier nicht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.09.2008, 20:00 Uhr
RedEagle



auf ****0** ist tatsächlich ein Exploit das diesem Codeauszug sehr ähnlich sieht...
Aber da ich die 4 Bytes als Adresse gedeutet habe, es aber tatsächlich ein Teil eines Shellcodes ist, werden ihm die Tipps nicht viel weiter helfen - wenn er wirklich böse Absichten hat...
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.09.2008, 20:45 Uhr
~die_antwort
Gast


ich glaube nicht dass er mit einem html-exploit viel schaden anrichten kann.
kenne mich da nicht aus aber die browser sind ziemlich sicher heute

@topic

er versucht den char-string als funktion aufzurufen
da er aber kein codiertes return drin hat muss das schief gehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.09.2008, 20:52 Uhr
ao

(Operator)


Merkwürdiges Argument. Wenn die Brauser sicher wären, dann wären die Exploits keine Exploits.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: