Próbuję ustawić SEH
bez użycia try except
(Jest to dla własnej osobistej wiedzy, aby uzyskać lepsze wyobrażenie o tym, jak SEH robót)Structured Exception Handler i Delphi
Poniższy kod nie działa
type
TSeh = packed record
OldSeh:DWORD;
NewSeh:DWORD;
end;
procedure test;
begin
WriteLn('Hello from seh');
end;
var
eu:TSeh;
old_seh:DWORD;
begin
asm
mov eax,fs:[0]
mov old_seh,eax
end;
eu.OldSeh := old_seh;
eu.NewSeh := DWORD(@test);
asm
mov eax,offset eu
mov fs:[0],eax
ret //This will cause an exception because jumps on an invalid memory address
end;
end.
Ale to robi
procedure test;
begin
WriteLn('Hello from seh');
end;
begin
asm
push offset test
push fs:[0]
mov fs:[0],esp
ret //This will cause an exception because jumps on an invalid memory address
end;
end.
Co robię źle? Jaka jest różnica między pierwszym i drugim kodem?
+1 za próbowanie czegoś dziwnego. –
+1 także za próbowanie czegoś dziwnego w Delphi i asmem – EMBarbosa