Delphi в стиле Си

Тема в разделе "DELPHI", создана пользователем Intro, 15 май 2019.

  1. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    840
    Баг может быть не в компиле а стандартных либах, которые компиль накинет из-за одной импортируемой функции. Короче, проще дождаться, когда Инди сам скажет, что он имел ввиду.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.813
    если это так, то это - баг в компиляторе, который смело можно репортить и ждать фикса...
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.787
    HoShiMin,

    > Совершенно не требует. На си может писать каждый школьник

    Как ты например. У тебя тут один какой то примитивный проект построенный на юзер патчах, даже там ты накосячил - я тебе приводил ROP-цепочку :sarcastic_hand:
     
  4. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    978
    Адрес:
    Россия, Нижний Новгород
    Ну или как я. Какая разница? Для си не нужно вообще никаких знаний об операционке. Можно писать сишные проекты и никогда не узнать, как работает ядро. Да и зачем? На си, например, пишут математику - какое им дело до внутренностей системы и каких-то уязвимостей и рейс-кондишнов? Так что, зря смеёшься, я действительно не вижу необходимости понимать внутреннее устройство системы, чтобы писать на си или плюсах, пока не пишешь системные вещи. Равно как и программисты на джаве и шарпе могут не знать, как их виртуалка работает внутри, и при этом писать качественный высокопроизводительный софт, который годами будет крутиться на хайлоад-серверах и выдавать аптайм под 100%.

    А про роп-цепочку - найти её ты нашёл и в своём визоре, может, от неё и защитился. Зато твой визор совершенно бессилен против инжектов через оконные хуки и AppInit_DLLs, что сводит на нет все его навороты, т.к. те же школьники в пару кликов подгрузят свои либы в накрытый твоим визором процесс. Да и сами ропы в нашей среде ты не встретишь. Ну и что теперь, смеяться над твоим проектом, что он тоже ни от чего не защищает?

    Мы ведь здесь вообще обсуждаем дэльфи, а не тех, кто на нём пишет. В сообществе о нём сложилось мнение, что это язык для школьников, и, на мой взгляд, неоправданно, потому что у людей он ассоциируется с паскалем и школьными годами. Просто психологическая неприязнь, а на деле на нём пишут крупные успешные коммерческие проекты, типа FLStudio или, например, в нашей компании на нём пишут некоторые части серверсайда. И нет никакой предвзятости - это отличный удобный инструмент, который хорошо справляется со своими задачами.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.813
    ну у Инде я не вспомню какой-то проект, который был бы не бессилен, так что это норма... достаточно сделать 64-битное приложение и любой проект Инде сразу отвалился...
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.787
    HoShiMin,

    > Какая разница? Для си не нужно вообще никаких знаний об операционке.

    Как это какая разница, нет тут другого примера, кроме твоего, там плюсы наверно.. как и дельф вы же сами говорите, разницы нет на чём косячить. Пока апп крутит какую то математику или менюшки гуя, то разницы нет. Как только начинается системная обработка, сразу становится видно качество такой поделки.

    > ты нашёл и в своём визоре, может, от неё и защитился. Зато твой визор совершенно бессилен против инжектов

    Причём тут визоры, защита от инжектов это не является задачей отладчика, он для других целей нужен.

    > Мы ведь здесь вообще обсуждаем дэльфи, а не тех, кто на нём пишет

    Обсуждать какой то яп без того, кто на нём пишет не имеет смысла. Так как сам по себе компилер ничего не может.
     
  7. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    978
    Адрес:
    Россия, Нижний Новгород
    Поделка зависит от программиста, не от языка. Разница только в удобстве. Компилятор развернёт синтаксис в одинаковый машинный код, что на дэльфи, что на плюсах. Говорю же, нет разницы. Ты можешь не использовать RTL и получить чистый машинный код без излишеств: что написал - то и получил. Можешь использовать. Но так же ты используешь и STL в плюсах. И в чём принципиальная разница?

    Ну приехали. А ко мне тогда какие претензии, что нет защиты от ропов, если она мне и не нужна?

    Ну посмотри на туториалы Ms-Rem'a. Он даже блендамед каллгейт в Ring0 на дэльфи писал и это прекрасно работало! Посмотри на статьи Rouse'a на хабре! Их код приятно читать, он понятный, и при том, занимается сугубо сложными системными вещами. Ты же не скажешь и про них, что они тоже школьники. Так значит, всё-таки, не в языке дело, а в разработчиках. Плохому танцору и язык мешает.

    Так я и говорю, что мы сейчас обсуждаем сферического дэльфиста-школьника в вакууме. Ты почему-то считаешь, что на дэльфи пишет только школота. Что в дэльфи мешает писать хороший системный код? Ничего. И солидные дядьки и даже корпорации вполне успешно используют дэльфи для своих задач.

    Другое дело, что некоторые вещи удобнее писать именно на плюсах: в дэльфи нет системных заголовочников, а в msvc есть волшебный winternl.h. Даже PEB придётся объявлять руками. Но даже это не очень большая проблема - писал дэльфовый API для работы с процессами, где все эти структуры объявлял (лежит у меня на гитхаб-гистсе). И ничего, не умер. Это совсем не та причина, чтобы говорить "фу, говно для школьников".
    --- Сообщение объединено, 4 авг 2019 ---
    А ещё, есть у меня синтезатор на системной пищалке, написанный на дэльфи, который умеет играть красивую музыку, набранную нотами. И вариант с парсером WAV'ок. Работает с драйвером WinRing0, а для выдержки точных пауз и замеров времени в том же дэльфи написал модуль на ассемблере, чтобы не потерять ни такта. Как тебе такое, Инди Маск?
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.787
    HoShiMin,

    > А ко мне тогда какие претензии, что нет защиты от ропов, если она мне и не нужна?

    Ты ведь написал какую-никакую но защиту. Поэтому я тебе показал как такие косячат, тем доком. У вас почему то у всех такое понятие - написать, а как будет происходить атака не важно. Отрыв от реальности, в которой такая поделка запускается.

    > Поделка зависит от программиста, не от языка.

    Прогер выбирает инструмент с соответственным порогом вхождения, в случае дельфей это выбирает исключительно школота.

    > Ну посмотри на туториалы Ms-Rem'a

    Нет смысла приводить единственный возможный пример, это специфический. Системщик добрался до дельфей, он такое мог сделать на любом ином языке, даже интерпретатором провернуть, там ничего нет, кроме вызова нтапи.
    --- Сообщение объединено, 4 авг 2019 ---
    > Работает с драйвером WinRing0, а для выдержки точных пауз и замеров времени в том же дэльфи написал модуль на ассемблере, чтобы не потерять ни такта.

    Кто то не наигрался с портами видимо. Можно открыть доступ к портам и для юзер кода, это значит что обычный код в юм может выполняться подобно ядерному, хоть и мод будет юзер - для этого есть маска IO в флажках.
     
  9. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    978
    Адрес:
    Россия, Нижний Новгород
    Так ведь и ты написал защиту. А потом оказывается, что она не для тех целей, что это не те задачи и что это вообще отладчик. Ропы - это такая штука, которой умеют пользоваться полтора землекопа. Есть гораздо более приоритетные пути обхода, которые надо закрыть в первую очередь, которыми пользуется каждый школьник, скачавший Xenos и ExtremeInjector. Главные "враги" - не прошаренные кодеры, которые напишут гипервизор, перехватят в ядре системные сервисы и скроют память. Главные враги - те самые школьники, у которых есть инжектор с одной кнопкой "сделать п-то" и который инжектит хрестоматийным способом через CreateRemoteThread(LoadLibrary).

    У си и дэльфи одинаковый порог вхождения и в обоих случаях он невысокий. Чуть сложнее джавы и шарпа. А если заниматься системными вещами, одинаково придётся изучать систему, и не важно, на каком языке эти знания применять. Я знаю очень много школьников, выбравших первым языком си - теперь си тоже язык для школоты?

    Ну так я про это и говорю уже который пост. Нет разницы, на чём писать. Язык никак не виноват в том, что программист не может выразить на нём свои мысли. Дэльфи ни в чём программиста не ограничивает.

    Просто есть языки, на которых те или иные вещи делать удобнее. На плюсах - системщину, на дэльфи - фронт, на джаве... На джаве вообще всё удобно, кроме системных вещей. А посмотри на питон! На нём пишешь и получаешь удовольствие - это швейцарский нож. Я на нём написал даже обёртку для своего драйвера. На скриптовом языке, Карл, ходим в ядро!

    Я всё это говорю к тому, что нет плохих языков - есть плохие программисты. Мне, например, не нравится шарп. Джаву обожаю (топ 1 в списке любимых языков), а на шарпе всё что-то не то. Никак не могу заставить себя на нём писать. Но при этом вижу, как он развивается, и уверенно скажу, что шарп - отличный язык!
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.787
    HoShiMin,

    > Я всё это говорю к тому, что нет плохих языков - есть плохие программисты.

    Язык без компилера не существует. Вот компилер в дельфе совсем говяный, он же линкует кучи говна. Да и как язык тоже полное говно, кривой синтаксис пришедший есчо из времён 8-ми битных контроллеров. На нём во время пост-совка обучали коденгу.

    > Так ведь и ты написал защиту. А потом оказывается, что она не для тех целей, что это не те задачи и что это вообще отладчик.

    Что то я не помню что бы я защиту какую то писал.
     
  11. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    978
    Адрес:
    Россия, Нижний Новгород
    Ну вот, это уже конкретный аргумент.
    И это тоже миф. Он линкует только необходимую RTL'ку и ничего лишнего. Например, проект на движке FireMonkey линкует в себя сам движок (а это, на минуточку, и рендер на DirectX 12, и поддержка шейдеров, и анимации, и 3D) - вот тебе и 15-20 мегабайт. А пустые консольные проекты безо всего и весят мало.

    Как контрпример - возьми прямой аналог FireMonkey из сишного мира - Qt. Собери его статически, чтобы не тащил зависимостей от libQt***.dll - и вот тебе те же 20 мегабайт на один эксешник. А собранный статически консольный апп в msvc тоже весит около 700 килобайт. Много это? Ни много, ни мало - просто необходимый размер, как сухой факт.

    Размер примерно одинаковый. Ты же не собираешь свои проекты с /MD, ведь их никто без рантаймов не сможет запустить.
    --- Сообщение объединено, 4 авг 2019 ---
    Ну а кто в моих темах говорил, что способ Х нерабочий, а с визором можно сделать то-то и то-то? Это противопоставление одно другому и даёт основания полагать, что оба этих проекта играют в одной категории
    --- Сообщение объединено, 4 авг 2019 ---
    А ещё, можно вообще убрать линковку ВСЕГО и получишь чистый си с begin..end'ами и размером в пару десятков килобайт.
    --- Сообщение объединено, 4 авг 2019 ---
    Ну вот что значит "полное говно"? Почему?
     
  12. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.787
    HoShiMin,

    > а с визором можно сделать то-то и то-то?

    Там две задачи сначала нужно решить, вначале реализовать реалтайм визор, а главное решить проблему по сервисам. Если какой то POC простейший работает, это не значит что это реализация защиты :drinks:

    > Ну вот, это уже конкретный аргумент.

    Конкретный аргумент будет если открыть отладчиком какой то софт, написанный на дельфе.
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.813
    Инде не шарит просто... RTL можно отключить так же, как можно отключить CRT в сишечке... и потом допустим во фри паскале есть LTO, по сути алгоритм три-шейкера над AST, не линкует код, который не используется... в современных дельфях наверняка есть аналог, раз они на LLVM теперь код генерят...
    --- Сообщение объединено, 4 авг 2019 ---
    ох, я бы не сказал...
     
  14. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    840
    а как вы определяете порог вхождения? вот пример, вроде прост, это школота?
    Код (Text):
    1.  
    2. #include <iostream>
    3. bool f(int n) {return std::cout<<n<<" " && n>0 && f(n-1);}
    4. int main(){f(5);}
     
    Последнее редактирование: 4 авг 2019
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.787
    q2e74,

    > а как вы определяете порог вхождения?

    Необходимые знания ограничиваются языковыми конструкциями. Это значит что знаний должно быть лишь столько, что бы выражения яп были корректны. Как будет работать выхлоп - не известно.
     
  16. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    5.442
    пре-процессор позволяет из одного япа сделать другой по синтаксису. единственное, что можно возвести в абсолют, еть качество работы компиля при приемлемой скорости и набор поддерживаемых платформ + набор доступных либ. :)
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.813
    в современных языках нет препроцессоров, в современных языках есть макросы и DSL...
     
  18. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    5.442
    те же яйца, только в профиль :)
     
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.787
    UbIvItS,

    Всё относительно, кому то клином свет сошёлся на скрипте. Если я постоянно разбираю бинарный выхлоп, то для оценки не нужно знать сурец. HoShiMin, правильно и логично рассуждает, но это происходит изолированно, с отрывом от реала, фактически обсуждение какой хороший скрипт.

    По факту же если копнуть любую поделку на скриптах, в частности дельфе - становится сразу всё понятно, пишется это где то далеко в иной вселенной". Кодер не знает архитектуру, под которую собирает апп, сейчас такое и не нужно.

    К примеру есть компилеры basic для x8 процев с сотней байт под стек. Удивительно даже как такое там может работать.
     
  20. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    5.442
    Indy_, всё упирается в твои цели и задачи == дом можно собирать по кирпичу, а можно песчинка к песчинке == пинцетиком. при создание большого кол-ва функций в программе пинцетик становится попросту экономически неоправданным в большинстве случаев. к примеру, зачем лишний раз оптимазить оконный интерфейс, если лаги и так незаметны глазу??? делфи и ему подобное создавались для клепания стандартных гуй без лишних затрат времени. А вот высокопроизводительную часть кода никто не мешает стругать на си+асм, ежли имеется таковая потреба. короче, задача и должный инструмент == никакой религии :grin:
     
    Indy_ и HoShiMin нравится это.