- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
procedure _; assembler;
asm
db 195 db 195
inc eax;
end;
procedure TForm1.Button1Click(Sender: TObject);
var a:KLOT; i:Integer;
begin
i:=0and+1;
a:=eb;
ShowMessage(IntToStr(Integer(a)));
end;
procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
begin
i:=StrToInt('00');
_;
ShowMessage(IntToStr(i));
end;
А вот это оттуда же.
Что произойдёт при вызове, мне страшно представить, ибо во время исполнения TForm1.Button2Click в вершине стека лежит не адрес возврата, а локальная переменная i.
В лучшем случае сработает защита. В худшем программа засрёт оперативку и выполнит случайный код.
https://govnokod.ru/414
А assembler нет. Но если написать директиву assembler, не будет стекфрейма с ebp. В верхушке будет адрес возврата.
Всё норм, retn просто вернёт управление вызывающему коду.
Oand бы скомпилировалось, а так нет.
inc eax там был до ретёрнов, это я тестил можно ли прыгнуть и изменить регистры. Можно. Просто он остался. Там ещё нопы были я из на реты поменял)