А можно не "на глаз" а с примером? Повторюсь: оплата идёт в момент компиляции при аккуратном применении. Тот же unique_ptr буквально компилируется в один указатель, никакой разницы с сырым указателем нет от слова совсем. std::array<X> ничем не отличается от X[], кроме дополнительной безопасности и контроля во время компиляции. Какие именно контейнеры уступают чему именно, можно примеры? А то попахивает что перемножаем яблоки на апельсины и жалуемся что на выходе лампальсины.
А если говорить про "чудесный геймдев"... Я вот вижу насколько блюпринты медленнее си -- и ведь не сказать что все бросили все блюпы нафиг и обходят их за километр, да?
Когда-то давным давно, когда земля была раскаленным шаром, а C -- макроассемблером на стероидах, switch это был способ задать таблицу переходов в исходнике (а не просто синтаксическим сахаром). Но да, даже тогда, это не было "за одно сравнение", те же проверки на на отрицательные, на больше максимума и так далее необходимы для хотя бы default.
Сейчас разницы между switch с breakами и if/else if/else if не должно быть, так как оптимизаторы стараются выжать максимум вне зависимости от исходника.
Как бенчмарк -- одобряю! В обоих случаях, как максимально возможный фоновый поток (то есть реально интегрируемо в приложение) так и отдельно стоящий код (просто выжать максимум).
А если не секрет, какой непротиворечивый юзкейс может быть? (впрочем, один я знаю -- обязательное соответствие определённому, неизменяемому, чек-листу; вообще он уже достаточно весом чтоб делать "надо так надо").
От слова "статья" ссылка отвалилась -- можно повторить?
p.s.: я всегда спрашиваю "а вам зачем?" даже когда есть идеи зачем -- потому, что я ни раз делал что-то, что оказывалось совсем не тем, что требуется; как в том анекдоте про кастрацию...
Прекрасная реализация..! :) Правда, как мне кажется, правильный вопрос на предложенный вопрос должен быть "А вам зачем?!" потому что должно быть незачем... :)
Эквивалент IDAшного "File=>Produce file=>Create dif file", где сохраняется результат редактирования образа в базе данных.
Гидра вообще, если я редактирую через memory -- подсвечивает синеньким что я менял. Если редактирую через ассемблер -- нет. В итоге надо помнить где что менял, либо экспортить весь бинарь и сравнивать потом. И то и то -- неудобственько.
Да, разумеется я заметил дырку (там вначале код, потом дыра под стандартную либу, потом дыра под конфигурацию и в конце немного параметров настройки прошивки)...
Кстати, может, я так же не заметил генерацию патч-файла, как в IDA есть? :) а то заниматься экспортом и диффингом немного устаёт.
Явное всегда лучше. По определению, если strncpy наступает на конец выданного буфера, она НЕ записывает туда ноль (я вежливый кролик, и промолчу про это поведение для str* функции). Да, можно полагаться на неявное обнуление структуры в данном конкретном случае в данном конкретном месте, но доп запись нуля никому хуже не сделает, а если там уже гарантирован ноль и компилятор может это доказать - вон он пусть и выкидывает эту строку (тем более, что для случая с sizeof он это сделать точно может).
А можно не "на глаз" а с примером? Повторюсь: оплата идёт в момент компиляции при аккуратном применении. Тот же unique_ptr буквально компилируется в один указатель, никакой разницы с сырым указателем нет от слова совсем. std::array<X> ничем не отличается от X[], кроме дополнительной безопасности и контроля во время компиляции. Какие именно контейнеры уступают чему именно, можно примеры? А то попахивает что перемножаем яблоки на апельсины и жалуемся что на выходе лампальсины.
А если говорить про "чудесный геймдев"... Я вот вижу насколько блюпринты медленнее си -- и ведь не сказать что все бросили все блюпы нафиг и обходят их за километр, да?
Контейнеры сами по себе не тяжелее сырого указателя. При аккуратном применении, стоимость умного указателя в рантайме ноль.
Равно как и у контейнеров.
Стоимость их оплачена во время компиляции
Однако качество перевода у @PatientZero таки выше.
Для написания этого поста использовался диапазон 4G/LTE, предоставленный T-Mobile US
https://godbolt.org/z/d576zb98n
Когда-то давным давно, когда земля была раскаленным шаром, а C -- макроассемблером на стероидах, switch это был способ задать таблицу переходов в исходнике (а не просто синтаксическим сахаром). Но да, даже тогда, это не было "за одно сравнение", те же проверки на на отрицательные, на больше максимума и так далее необходимы для хотя бы default.
Сейчас разницы между switch с breakами и if/else if/else if не должно быть, так как оптимизаторы стараются выжать максимум вне зависимости от исходника.
Контекст важен, да. В прямом-личном общении я всегда стараюсь узнать как можно больше контекста.
Как бенчмарк -- одобряю! В обоих случаях, как максимально возможный фоновый поток (то есть реально интегрируемо в приложение) так и отдельно стоящий код (просто выжать максимум).
А если не секрет, какой непротиворечивый юзкейс может быть? (впрочем, один я знаю -- обязательное соответствие определённому, неизменяемому, чек-листу; вообще он уже достаточно весом чтоб делать "надо так надо").
От слова "статья" ссылка отвалилась -- можно повторить?
p.s.: я всегда спрашиваю "а вам зачем?" даже когда есть идеи зачем -- потому, что я ни раз делал что-то, что оказывалось совсем не тем, что требуется; как в том анекдоте про кастрацию...
(картинка с троллейбусом)
Прекрасная реализация..! :) Правда, как мне кажется, правильный вопрос на предложенный вопрос должен быть "А вам зачем?!" потому что должно быть незачем... :)
Всё, замержили: https://github.com/NationalSecurityAgency/ghidra/pull/6506
В следующем релизе будет явно, что можно гексы :)
Вскрыть кислотной ванной, лазером прожечь, залить компаундом.
ок, дошло, где ударение в слове. :D
Эквивалент IDAшного "File=>Produce file=>Create dif file", где сохраняется результат редактирования образа в базе данных.
Гидра вообще, если я редактирую через memory -- подсвечивает синеньким что я менял. Если редактирую через ассемблер -- нет. В итоге надо помнить где что менял, либо экспортить весь бинарь и сравнивать потом. И то и то -- неудобственько.
"меньше цены" или "меньше ценности"?
Да, разумеется я заметил дырку (там вначале код, потом дыра под стандартную либу, потом дыра под конфигурацию и в конце немного параметров настройки прошивки)...
Кстати, может, я так же не заметил генерацию патч-файла, как в IDA есть? :) а то заниматься экспортом и диффингом немного устаёт.
Метрическая сила...!
Меня вот это смутило - отсутствие тут *.hex.
Да, если выбрать hex файл, тогда он даёт выбор:
Теперь смогу сэкономить 5 секунд в следующий раз :)
p.s.: пойду отправлю пулреквесть :)
Явное всегда лучше. По определению, если
strncpyнаступает на конец выданного буфера, она НЕ записывает туда ноль (я вежливый кролик, и промолчу про это поведение для str* функции). Да, можно полагаться на неявное обнуление структуры в данном конкретном случае в данном конкретном месте, но доп запись нуля никому хуже не сделает, а если там уже гарантирован ноль и компилятор может это доказать - вон он пусть и выкидывает эту строку (тем более, что для случая с sizeof он это сделать точно может).Все же идея была сделать вот так:
и это стандартный паттерн использования в комбинации с strncpy
Где в гидре прогрузка HEXов? Может я что-то не нашел?
В API вижу вот это: https://ghidra.re/ghidra_docs/api/ghidra/app/util/opinion/IntelHexLoader.html
но в UI варианта такого не нашел.
А что будет если jmp на jmp? Например, jne на je?