AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CreateWindowEx stack overrun?

Ein Thema von sansimarkus · begonnen am 3. Jul 2012 · letzter Beitrag vom 4. Jul 2012
 
sansimarkus

Registriert seit: 15. Dez 2011
17 Beiträge
 
Delphi XE2 Architect
 
#1

CreateWindowEx stack overrun?

  Alt 3. Jul 2012, 14:51
Moin,

es geht um folgenden Code:
Delphi-Quellcode:
ZeroMemory(@wcex,sizeof(wcex));
 with wcex do
  begin
   cbSize := SizeOf(wcex);
   style := CS_HREDRAW or CS_VREDRAW or CS_OWNDC;
   lpfnWndProc := @wndproc;
   hInstance := SysInit.HInstance;
   hCursor := LoadCursor(0,IDC_ARROW);
   lpszClassName := PChar(settings.sWindowClassName);
   hbrBackground := 1;
  end;
 if RegisterClassEx(wcex) = 0 then
  raise EREGISTERCLASSEX.create({$IFDEF DEBUG}'RegisterClassEx(wcex) failed '+inttostr(getlasterror)+'(GLE)'{$ENDIF});

 case settings.rResolution.rScreenMode of // = smWINDOWEDREGULAR
  smFSCRN:
    ;
  smWINDOWEDREGULAR:
   begin
    dwExStyle:=WS_EX_APPWINDOW or WS_EX_WINDOWEDGE;
    dwStyle:=WS_OVERLAPPEDWINDOW or WS_CLIPSIBLINGS or WS_CLIPCHILDREN;
    AdjustWindowRectEx(WindowRect,dwStyle,false,dwExStyle);
   end;
  smWINDOWEDNOBORDER:
   ;
  smFSCRNWINDOWED:
   ;
 end;


 asm
   int 3 // bis hierhin komme ich
 end;
 // mit F7 springt er dann weiter in die winapi.pas
 _hWnd:=CreateWindowEx(dwExStyle,
                       PChar(settings.sWindowClassName),
                       PChar(settings.sWindowCaption),
                       dwStyle,
                       WindowRect.Left,
                       WindowRect.Top,
                       WindowRect.Width,
                       WindowRect.Bottom,
                       0,0,HInstance,nil);
 // bis hierhin kommt er nicht mehr, im debuglog von XE2 steht ein fehler siehe unten
 if _hWnd = 0 then
  raise ECREATEWND.create({$IFDEF DEBUG}'CreateWindowEx failed '+inttostr(getlasterror)+'(GLE)'{$ENDIF});
 ShowWindow(_hWnd, SW_SHOW);
 SetForegroundWindow(_hWnd);
 asm
   int 3
 end;
Der Debug Output:

Code:
Non-user Breakpoint at $0048B82D. // der int3 breakpoint vor createwindowex
STATUS_STACK_BUFFER_OVERRUN encountered

Process dx11test.exe (1456)
Non-user Breakpoint at $7546FF9A.
Die addresse vom letzten Breakpoint zeigt er mir auch im debugger an:
7546FF9A C745FCFEFFFFFF mov [ebp-$04],$fffffffe

Das ganze ist in einem try..except block, aber bis zum except kommt er auch nicht.

Wenn ich es schaffe mit F7 nicht automatisch im CPU-Viewer zu landen (scheint glückssache zu sein ob der CPUviewer aufgeht oder nicht) dann hängt sich mein DelphiXE2 bei meiner WndProc funktion auf, bis die er steppt nachdem er aus der winapi.pas raus kommt. Die WndProc funktion sieht so aus:

Delphi-Quellcode:
implementation
var
 myclassinstance: TMyClass;

function WndProc(i_hWnd:HWND;i_Message:LongWord;i_wParam:WPARAM;i_lParam:LPARAM):LResult;
begin
  result := myclassintance.WndProcEx(i_hWnd, i_Message, i_wParam, i_lParam);
end;

function TMyClass.WndProcEx(i_hWnd:HWND;i_Message:LongWord;i_wParam:WPARAM;i_lParam:LPARAM):LResult;
begin
  result := DefWindowProc(i_hWnd, i_Message, i_wParam, i_lParam);
end;
Selbes Resultat wenn ich die funktionen einfach leer lasse.


Jetzt das interessante: wenn ich als 64Bit kompiliere geht es einwandfrei ohne jegliche Änderung oder irgendwelchen {$IFDEF WIN64}'s (die int 3's mal außen vor).

Ich bin völlig ratlos.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz