где-то читал, что параллельное программирование сильно усложняет отладку и реверс готового бинаря. Это действительно работает или просто выдумка анона?
подумай логически, отладка конкретного пида, а пид где? кто может точку останова подвинуть на инструкцию дальше? есди пид стоит, то какая разница сколько программистов накидывают. А бинарь есть бинарь. Если бинарь - интерпретатор, а программы для исполнения внутри бинаря нет, он у какого то будущего типапрограммиста то... а что ты тогда реверсишь? вот интерпретатор пустой и отреверсишь.
конечно, усложняет - доступ к общим данным нужно разграничивать, а с ростом колва потоков начинают перемешиваться софтварные и хардварные ошибки. при этом код разграничения доступа должен быть предельно облегчённым, чтобы не росли лаги (кои сами по себе легко могут становиться ошибкой).
Пример бы глянуть, это как параллельное ? Имеется процедура в памяти, как ее синхронно выполнить на разных потоках ? Пока первый тред исполняет инструкцию, второй ждет и далее свапконтекст между ними.. для этого имеются фиберы в нт. Имхо бред какой то. Задача(состояние задачи) существует как совокупность контрол/дата флоу, переключения между частями это обычная виртуализация кода, та самая выгрузка контекста. Месье не поняв захотел изобрести велосипед
А почему бред? Такое сплошь и рядом используют даже в контексте обычного программирования - грин-треды, фиберы, корутины, асинки, как ни назови. Их даже без протектора сложно дебажить (особенно нативные, и особенно если отладчик их не понимает), что уж говорить, если всё это сверху ещё запротекчено.
HoShiMin Параллельное прог-е это тс видимо имеет ввиду, не обычный синхрон между задачами. Это лютый академический матан по теме компиляторной оптимизации, схождение условий и тп анализ флоу. В данном случае имеется ввиду(я думаю так) разграничение контекста(task state) для защиты, а это тривиальная вирта.
Реверс усложняет перпендикулярное, а также касательное к окружности программирование. О большей части хитрожопых приемов противодействия реверсёр скорей всего даже не узнает, просто отметит, что оно как-то странно устроено.
Нужно немного более абстрактно понимать, распарал. можно сделать на этапе сборки, это работа компилера. На этапе же исполнения распар. достигается через последовательное переключение контекста, это дает одновременное исполнение нескольких задач. Интерпретатор/транслятор исполняет грубо говоря некоторую задачу, он может так же транслироваться поверх. Но назвать такое пар прг. врядле возможно. Мну довольно много лет потратил на разбор всяких хитрожопых поделок(виксы, протекторы), автоматикой. Там решение такое - taint propagation, вводимые данные/событие задается как датасет для наследования(taint). Далее никакие манипуляции не приведут к утери потока их(dataflow) и все приложение покрывается. Для всяких вирт и прочих извратов пишется обработка, так что врядле это анализ усложняет.