1. Pascal / Говнокод #29128

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 01 Мая 2025

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

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

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

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

      В лучшем случае сработает защита. В худшем программа засрёт оперативку и выполнит случайный код.
      Ответить
      • Там и джва же. Второй на подстраховке, всё ок
        Ответить
        • У нас был говнокод с двумя джампами.

          https://govnokod.ru/414
          Ответить
      • А что, вызов асм функции инлайнится в поскакале?
        Ответить
        • Спутал с функцией inline — там инлайнится. Давно не использовал...

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

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

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