Школоло / Говнокод #29128 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 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;

Сами пытайтесь понять что я тут хотел сделать KEKW. Я был накурен и не спал полтора дня.

Запостил: KOTOM KOTOM, (Updated )

Комментарии (18) RSS

  • KLOT=(tom=-1,kis=tom,mis,kot=-10,eb,w);

    А вот это оттуда же.
    Ответить
  • 195 — это код инструкции retn.

    Что произойдёт при вызове, мне страшно представить, ибо во время исполнения TForm1.Button2Click в вершине стека лежит не адрес возврата, а локальная переменная i.

    В лучшем случае сработает защита. В худшем программа засрёт оперативку и выполнит случайный код.
    Ответить
    • А что, вызов асм функции инлайнится в поскакале?
      Ответить
      • Спутал с функцией inline — там инлайнится. Давно не использовал...

        А assembler нет. Но если написать директиву assembler, не будет стекфрейма с ebp. В верхушке будет адрес возврата.

        Всё норм, retn просто вернёт управление вызывающему коду.
        Ответить
    • Оно не скомпилируется томущо 0and.
      Oand бы скомпилировалось, а так нет.
      Ответить
      • Ну вот, а вы говорите ротоёб не умеет программировать
        Ответить
    • Юзать анонимные функции и лямбды в языке со строгой типизацией - это все равно, что после сранья вытирать руки о себя. Собственно, где там ещё строгая-то типизация, всё проёбано.

      Hi, Embarcadero.
      Ответить
  • а зачем inc eax после двух ретёрнов? Это какое-то выравнивание?
    Ответить
  • Я делал эксперименты. Цель была выяснить возможно ли создать функцию, забить её C3 или 90 и использовать как память для воссоздания функций на лету. Оказалось можно.+ ещё изучал как енумы работают.
    inc eax там был до ретёрнов, это я тестил можно ли прыгнуть и изменить регистры. Можно. Просто он остался. Там ещё нопы были я из на реты поменял)
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8