На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (7) « Первая ... 5 6 [7]  все  ( Перейти к последнему сообщению )  
> Чистота кода VS оптимизация
    Цитата Qraizer @
    чем напрочь запрещаем ASLR.
    Чтобы ASLR работал, нужно либо включить соответствующие опции в PE-заголовке (при компиляции, например). Либо прописать эти опции в реестре для конкретного файла.
    Но в целом ты прав, конечно.

    Добавлено
    Не углублялся в эту тему раньше.
    Ну тогда вместо отключения фиксапов можно включать ASLR и DEP (ну или просто DEP хотя бы):
    ExpandedWrap disabled
      {$APPTYPE CONSOLE}
      uses Windows, SysUtils;
      const
        IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = $40;  // ASLR, {$DYNAMICBASE ON} in Delphi 2007+
        IMAGE_DLLCHARACTERISTICS_NX_COMPAT = $100;    // DEP
      {$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE or IMAGE_DLLCHARACTERISTICS_NX_COMPAT} // {$SetPEOptFlags $140}, works on Delphi 6+ (and maybe earlier)
      // http://qaru.site/questions/663368/how-can-i-enable-depnx-and-aslr-on-a-delphi-2006-or-earlier-executable
      // https://habrahabr.ru/company/eset/blog/206244/
       
      const R: Byte = $C3;
      begin
        WriteLn(IntToHex(DWord(@IntToHex), 8));
        try
          TProcedure(@R);
          WriteLn('DEP is OFF :(');
        except
          WriteLn('DEP is ON :)');
        end;
      end.
    Сообщение отредактировано: Jin X -
    vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
      Без reloc-ов по-любому ASLR не заработает. Но тут как бы палка о двух концах. Во время отладки стрипать их даже полезно, ибо бряки, не привязанные к строкам кода, а поставленные, скажем, на конкретные ассемблерные инструкции, что нередко бывает нужно для либ без сыров, при активном ASLR слетают токатак. Но вот в релизе я удалять их всё-таки бы не советовал.
      Одни с годами умнеют, другие становятся старше.
        Цитата Qraizer @
        Без reloc-ов по-любому ASLR не заработает.
        Да это понятное дело.

        Цитата Qraizer @
        Во время отладки стрипать их даже полезно
        Можно так:
        ExpandedWrap disabled
          {$IFDEF DEBUG}
            {$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}
          {$ELSE}
            {$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE}
          {$ENDIF}
          {$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_NX_COMPAT}
        :)
        vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
          Кстати, кто подскажет, что это за прога (которая показывает заголовок PE в таком виде)?

          user posted image

          user posted image
          vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
            Цитата Serafim @
            Крупные методы принято делить на более мелкие, в частности твой вариант, в языках с возвращаемым значением в операндах (JS, Python, Ruby), вместо кастуемых (Java, PHP) моет выглядеть следующим образом:



            А в нормальных следующим:

            ExpandedWrap disabled
              doSomethingClever :: Int -> String -> String
              doSomethingClever id name = show id ++ " => " ++ name
               
              tryToDoSomethingClever :: Maybe Int -> Result String
              tryToDoSomethingClever idParam = do
                  id   <- getId idParam
                  item <- getItem id
                  name <- getName item
                  return (doSomethingClever id name)


            Добавлено
            Цитата Jin X @
            Embarcadero чисто по загону новые версии выпускает. Для прикола, тупо порубить хоть чуть-чуть бабла на легаси-проектах

            Ага.
            Сообщение отредактировано: korvin -
            “Object-oriented design is the roman numerals of computing.” — Rob Pike
            All software sucks
              Цитата korvin @
              А в нормальных следующим:

              Оуоу, палехче)))

              P.S. А это разве не первый вариант? Возвращается же в конце концов функция (точнее композиция функций). Только указанная в качестве первого операнда, если, конечно не использовался оператор "$", тогда вернётся последующий аргумент.

              P.P.S. Хотя... Кажется это ещё один вариант:

              1) C, Java, PHP: "res = a || b"
              Результат: res = bool

              2) JS, Ruby, Python: "res = a || b"
              Результат: res = a (если он тру) или b

              3) Haskell: "res = a || b"
              Результат: функция "||" от a и b (я довольно плохо плохо знаю Haskell, так что поправь, если ошибаюсь)
              Сообщение отредактировано: Serafim -
              user posted image user posted image user posted image
                Цитата Serafim @
                Результат: функция "||" от a и b

                Что?

                ExpandedWrap disabled
                  {-
                   
                  tryToDoSomethingClever :: Maybe Int -> Result String
                  tryToDoSomethingClever idParam = do
                      id   <- getId idParam
                      item <- getItem id
                      name <- getName item
                      return (doSomethingClever id name)
                   
                  tryToDoSomethingClever :: Maybe Int -> Result String
                  tryToDoSomethingClever idParam =
                      getId idParam >>= (\id ->
                          getItem id >>= (\item ->
                              getName item >>= (\name ->
                                  return (doSomethingClever id name))))
                   
                  -}
                   
                  tryToDoSomethingClever :: Maybe Int -> Result String
                  tryToDoSomethingClever idParam =
                      case getId idParam of
                          Err msg -> Err msg
                          Ok  id  -> case getItem id of
                              Err msg  -> Err msg
                              Ok  item -> case getName item of
                                  Err msg  -> Err msg
                                  Ok  name -> Ok (doSomethingClever id name)


                https://ideone.com/f4Bzen
                Сообщение отредактировано: korvin -
                “Object-oriented design is the roman numerals of computing.” — Rob Pike
                All software sucks
                  Цитата Serafim @
                  1) C, Java, PHP: "res = a || b"
                  Результат: res = bool
                  Что значит bool? true если a, иначе true если b, иначе false. При проверке условия вместо возврата результата сразу производится переход к нужной ветке.
                  На самом деле вычисление результата тоже производится переходами.
                  То есть фактически в C res = a || b означает res = (a || b)? true: false

                  Цитата Serafim @
                  2) JS, Ruby, Python: "res = a || b"
                  Результат: res = a (если он тру) или b
                  В Python надо писать res = a or b. В остальном почти верно. При вычислении результата, сразу после определения значения выражения производится переход на точку сохранения результата.
                  Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                    Цитата amk @
                    Что значит bool?

                    Это означает, что там может находиться либо true, либо false и никак иначе.
                    user posted image user posted image user posted image
                      Цитата Serafim @
                      Это означает, что там может находиться либо true, либо false и никак иначе.
                      Но не указано, что если по `a` можно определить ответ, то `b` не анализируется
                      Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                        amk, я думаю, это не сложно определить эмпирически :)
                        vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
                          Цитата amk @
                          Но не указано, что если по `a` можно определить ответ, то `b` не анализируется

                          Да ладно? :o Ты уверен? :huh:
                          user posted image user posted image user posted image
                            Уверен. В C это описано стандартом.
                            Так же и в C++, если переменные не являются пользовательскими типами.
                            Но в таком случае не может быть уверенности даже в результирующем значении. Пользовательский operator||() вовсе не обязан возвращать bool
                            Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                              Цитата Serafim @
                              Да ладно? Ты уверен?

                              Так практически везде же.
                              Подпись была включена в связи с окончанием срока наказания
                                Простите, я табличку сарказма потерял :D
                                user posted image user posted image user posted image
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1446 ]   [ 14 queries used ]   [ Generated: 20.08.19, 17:15 GMT ]