Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Stackoverflow erkennen

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 ] [ 3 ] > 4 <
030
11.11.2005, 16:48 Uhr
Sponge



ok ok .. ich gestehe meinen Fehler in meiner Ausdrucksweise ein, es soll eine dynamische Bibliothek erzeugt werden, die vorrangig auf Windows Systemen läuft, jedoch jeder Zeit ohne große Umprogrammiererei für LINUX o.ä. kompiliert werden kann.

So nun aber ein schönes Wochenende
--
Es gibt 10 Arten von Leuten:
die, die das binäre System verstanden haben,
und die, die es nicht verstanden haben ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
031
16.11.2005, 12:27 Uhr
Sponge



So dank Spacelord eine neue Idee, immer das Flag abzufragen, jedoch fehlt mir da jetzt der richtige Einstieg, wie man da machen könnte. Hatte gelesen, dass das Page_Guard flag immer an der untersten /obesten Stackposition sitzt und mit jedem neuem Stackelement weitergeschoben wird, bis es eine Accessviolation gibt und das Page_guard flag nicht mehr exisitiert. SO nun könnte man doch auf die Existenz dieses Flag prüfen .. nur wie *kopf kratz

Dank schon mal im Voraus
--
Es gibt 10 Arten von Leuten:
die, die das binäre System verstanden haben,
und die, die es nicht verstanden haben ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
032
16.11.2005, 13:45 Uhr
Sponge



ich führe wie es scheint mittlerweile nur noch ein Selbstgespräch..
naja macht auch nix ...
zumindest habe ich relativ brauchbaren Code, mit dem man zumindest unter win32 den StackOverFlow vorhersehen können sollte


Code:
#include <stdio.h>
#include <windows.h>

int fun() {
    SYSTEM_INFO * info = (SYSTEM_INFO*)calloc(1,sizeof(SYSTEM_INFO));
    GetSystemInfo(info);
    MEMORY_BASIC_INFORMATION * buffer = (MEMORY_BASIC_INFORMATION *)calloc(1,sizeof(MEMORY_BASIC_INFORMATION));
    if (VirtualQuery(&buffer-info->dwPageSize,buffer,sizeof(MEMORY_BASIC_INFORMATION)))
    printf("Flag ist %x (%d - %d)\n",buffer->Protect,buffer->BaseAddress,buffer->AllocationBase);
    fun();
}

int main (int argc, char * argv[]) {    
    fun (1,2);
    return 0;
}



Der Stackoverflow kündigt sich an, wenn buffer->Protect 1 bzw. buffer->AllocationBase 0 wird. Zu diesem Zeitpunkt hat man noch die letzte Seite die man vollschreiben kann (sollte für Errorhandling reichen)

Die Hauptidee geht von Spacelords Beitrag aus
--
Es gibt 10 Arten von Leuten:
die, die das binäre System verstanden haben,
und die, die es nicht verstanden haben ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
033
16.11.2005, 19:13 Uhr
Spacelord
Hoffnungsloser Fall


Hi Sponge,
der VirtualQuery Ansatz ist schon eine Möglichkeit um das PAGE_GUARD Flag abzufragen allerdings habe ich da noch einen kleinen Wermutstropfen für dich .
Der Stack wird unter Windows 98/ME anders gesichert als unter 2K/XP etc.
98/ME kennen überhaupt kein PAGE_GUARD Flag.
Der Stack unter 98 ist grundsätzlich 128 KB grösser als das was du an Stack "angefordert" hast.
Dann ist jeweils ein 64KB Block vor und nach dem Stack um Stacküber- und unterlauf zu "verhindern".
Anstelle des wandernen PAGE_GUARD Flags arbeitet 98 mit dem Flag PAGE_NOACCES welches dann ne AccesViolation auslöst.Diese wird vom OS abgefangen das Schutzattribut der Seite geändert usw. usw.
Da wirst du dir wohl noch was einfallen lassen müssen .

Ich würde nach wie vor eher SEH nutzen als,schon innerhalb der Microsoftgrenzen,"verschiedenen" Code zu schreiben der auf Implementierungsdetails aufsetzt.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
034
17.11.2005, 08:42 Uhr
Sponge



danke für deine Ausführungen und Warnungen,
zum Glück soll das Programm ja lediglich auf NT und XP Maschinen laufen (wer setzt auch freiwillig ein 9x System in einer Firma ein?), von daher ist das kein Problem. Wegen den Flags.. so wie das Programm jetzt oben steht erzeugt es auf einem 2K System einen NOACCESS und läuft bis jetzt stabil. Werde es heute noch auf anderen Systemen testen, um zu sehen was da passiert.
Das mit dem SEH ist eine feine Sache und funktioniert auch wunderbar, nur wird es leider vom GCC nicht unterstützt, bzw. hab ich es unter dem GCC noch nicht zum laufen gebracht. Beide Varianten sind für Linux nicht brauchbar, da es weder SEH noch VirtualQuery gibt (hatte gelesen dass sie dran arbeiten, vllt find ich ja auch Bibliotheken die das unter Linux unterstützen)
--
Es gibt 10 Arten von Leuten:
die, die das binäre System verstanden haben,
und die, die es nicht verstanden haben ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] > 4 <     [ 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: