Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.91.153] |
|
Страницы: (7) « Первая ... 5 6 [7] все ( Перейти к последнему сообщению ) |
Сообщ.
#91
,
|
|
|
Чтобы ASLR работал, нужно либо включить соответствующие опции в PE-заголовке (при компиляции, например). Либо прописать эти опции в реестре для конкретного файла.
Но в целом ты прав, конечно. Добавлено Не углублялся в эту тему раньше. Ну тогда вместо отключения фиксапов можно включать ASLR и DEP (ну или просто DEP хотя бы): {$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. |
Сообщ.
#92
,
|
|
|
Без reloc-ов по-любому ASLR не заработает. Но тут как бы палка о двух концах. Во время отладки стрипать их даже полезно, ибо бряки, не привязанные к строкам кода, а поставленные, скажем, на конкретные ассемблерные инструкции, что нередко бывает нужно для либ без сыров, при активном ASLR слетают токатак. Но вот в релизе я удалять их всё-таки бы не советовал.
|
Сообщ.
#93
,
|
|
|
Цитата Qraizer @ Да это понятное дело.Без reloc-ов по-любому ASLR не заработает. Цитата Qraizer @ Можно так:Во время отладки стрипать их даже полезно {$IFDEF DEBUG} {$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED} {$ELSE} {$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE} {$ENDIF} {$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_NX_COMPAT} |
Сообщ.
#94
,
|
|
|
Кстати, кто подскажет, что это за прога (которая показывает заголовок PE в таком виде)?
|
Сообщ.
#95
,
|
|
|
Цитата Serafim @ Крупные методы принято делить на более мелкие, в частности твой вариант, в языках с возвращаемым значением в операндах (JS, Python, Ruby), вместо кастуемых (Java, PHP) моет выглядеть следующим образом: … А в нормальных следующим: 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 чисто по загону новые версии выпускает. Для прикола, тупо порубить хоть чуть-чуть бабла на легаси-проектах Ага. |
Сообщ.
#96
,
|
|
|
Цитата 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, так что поправь, если ошибаюсь) |
Сообщ.
#97
,
|
|
|
Цитата Serafim @ Результат: функция "||" от a и b Что? {- 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 |
Сообщ.
#98
,
|
|
|
Цитата Serafim @ Что значит bool? true если a, иначе true если b, иначе false. При проверке условия вместо возврата результата сразу производится переход к нужной ветке.1) C, Java, PHP: "res = a || b" Результат: res = bool На самом деле вычисление результата тоже производится переходами. То есть фактически в C res = a || b означает res = (a || b)? true: false Цитата Serafim @ В Python надо писать res = a or b. В остальном почти верно. При вычислении результата, сразу после определения значения выражения производится переход на точку сохранения результата. 2) JS, Ruby, Python: "res = a || b" Результат: res = a (если он тру) или b |
Сообщ.
#99
,
|
|
|
Цитата amk @ Что значит bool? Это означает, что там может находиться либо true, либо false и никак иначе. |
Сообщ.
#100
,
|
|
|
Цитата Serafim @ Но не указано, что если по `a` можно определить ответ, то `b` не анализируется Это означает, что там может находиться либо true, либо false и никак иначе. |
Сообщ.
#101
,
|
|
|
amk, я думаю, это не сложно определить эмпирически
|
Сообщ.
#102
,
|
|
|
Цитата amk @ Но не указано, что если по `a` можно определить ответ, то `b` не анализируется Да ладно? Ты уверен? |
Сообщ.
#103
,
|
|
|
Уверен. В C это описано стандартом.
Так же и в C++, если переменные не являются пользовательскими типами. Но в таком случае не может быть уверенности даже в результирующем значении. Пользовательский operator||() вовсе не обязан возвращать bool |
Сообщ.
#104
,
|
|
|
Цитата Serafim @ Да ладно? Ты уверен? Так практически везде же. |
Сообщ.
#105
,
|
|
|
Простите, я табличку сарказма потерял
|