hab 2k mit Delphi7
mit sysutils gehts, ohne nicht
ne integerdivision fängt der aber ohne probleme auch ohne eingebundene Sysutils ab
folgenden code hab ich im moment:
Delphi-Quellcode:
program Project2;
uses
windows;
procedure crash_ollydbg;
asm
pushad
push offset @@handler
xor eax, eax
push fs:[eax]
mov fs:[eax], esp
mov ebx, esp
push eax
push $73257325
push esp
push $5
push esp
push $2
push eax
push $40010006
call RaiseException
@@handler:
mov eax, [esp+$C]
mov esp, [eax+$A4]
xor eax, eax
pop fs:[eax]
pop eax
popad
end;
begin
crash_ollydbg;
MessageBox(0,'
you will never see me with ollydbg attached',
nil,0);
end.
dafür nutze ich EBX aus um ESP zu speichern weil das innerhalb von RaiseException bis zur
Exception nicht mehr geändert wird un später im
Exception Record bzw im
Exception Conext auf das alte ESP zeigt damit ich die vorher gepusheten resiger wieder ordentlich füllen kann
dabei ist es mir wichtig das ich RaiseException aufrufen kann und nicht OutputDebugStringA (was das selbe in dem fall wäre)
nur weiß ich nicht pb das überall funtkioniert, da ich nicht garantieren kann das EBX nicht unter 95/98/ME/2k etc. geändert wird
deshalb würd ich am liebsten try except nehmen, aber viewlleicht kenn einer noch eine andere assembler möglichkeit