Сейчас на форуме: (+4 невидимых) |
eXeL@B —› Программирование —› Формат для передачи данных между потоками |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 02 января 2020 21:54 · Личное сообщение · #1 |
|
Создано: 02 января 2020 22:52 · Личное сообщение · #2 |
|
Создано: 02 января 2020 23:41 · Личное сообщение · #3 |
|
Создано: 02 января 2020 23:45 · Личное сообщение · #4 |
|
Создано: 03 января 2020 05:03 · Личное сообщение · #5 |
|
Создано: 03 января 2020 10:10 · Личное сообщение · #6 |
|
Создано: 03 января 2020 15:08 · Личное сообщение · #7 Более ООП подход - файловые проекции. CreateFileMapping/OpenFileMapping. Для синхронизации можно использовать критические секции (один процесс) или события (разные процессы, можно и в одном, но будет медленнее). А вообще более детальное описание задачи, вероятно, помогло бы в поиске более качественного решения. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 03 января 2020 18:37 · Личное сообщение · #8 |
|
Создано: 03 января 2020 19:29 · Личное сообщение · #9 |
|
Создано: 03 января 2020 19:46 · Личное сообщение · #10 ARCHANGEL Крит секции могут быть глобальными, те для межпроцессной синхронизации. Вот только эти синхронизации использовались на младших версиях, затем их заменили на RWL, в частности SRWL. Так как в критсект нет разделения по типу доступа к ресурсам, а это не профайл. rmn Прямой записью в чужой стек, ну да, начинать нужно с эксплойтов, а лучший способ это обкатать на своих косяках galenkane Самый быстрый способ- создание глобальной переменной, как выше сказали это отображение одной физической области на разные адреса, в частности в разных ап(процессах). Потоки будут туда обращаться, а железо произведёт синхрон, те атомарные выборки нп по выравниванию, не смотря что отображение в другом ап. Ну и для быстрого синхрона использовать эффективные синхронизации, это уже зависит от процесса - потоки выполняются в одном или в разных процессах. Если в разных, то будет долго из за приведения описателя к обьекту ядром. ----- vx |
|
Создано: 03 января 2020 20:16 · Личное сообщение · #11 |
|
Создано: 03 января 2020 21:11 · Личное сообщение · #12 galenkane Жуткая жуть, конечно, а не PoC. Потому я вам и предлагаю не костыли тут городить, а описать задачу. Практическую, которую вам нужно решить. Вряд ли на практике нужно так через жопу вызвать MessageBox. ----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: difexacaw |
|
Создано: 03 января 2020 22:51 · Личное сообщение · #13 |
|
Создано: 04 января 2020 01:35 · Личное сообщение · #14 |
|
Создано: 04 января 2020 02:48 · Личное сообщение · #15 |
|
Создано: 04 января 2020 09:38 · Личное сообщение · #16 |
|
Создано: 04 января 2020 10:08 · Личное сообщение · #17 Хз проблема в чем. Создай структуру, объяви локальную переменную этого типа, заполни, передай указатель на нее в lpParameter. Не забывай, что как только в текущем потоке завершится функция, в локальных переменных которой лежит это структура, папе сделают укол. Тебе советы по синтаксису твоего ЯП чтоли нужны? ----- 2 оттенка серого |
|
Создано: 04 января 2020 10:13 · Личное сообщение · #18 galenkane Твой "stackprotect" это один большой лулз с use-after-free как бонус. Нужно больше С++ кастов и прочей абсолютно ненужной здесь ООП мишуры. Без этого ты эти ссаные вин апи не дернешь однозначно. | Сообщение посчитали полезным: morgot |
|
Создано: 04 января 2020 10:18 · Поправил: f13nd · Личное сообщение · #19 |
|
Создано: 04 января 2020 18:41 · Личное сообщение · #20 |
|
Создано: 05 января 2020 01:51 · Поправил: difexacaw · Личное сообщение · #21 f13nd > WM_COPYDATA В этом смысл - посылка нотифи в ожидающий обьект, поток выйдет из сна и получит данные; при этом событии стек сместится вниз, так как всякое сообщение доставляется как обратный вызов ядра с параметрами. Тоесть никаких траблов со стеком не произойдёт, в отличие от прямой записи в локальную переменную. Это отличается от обычного чтения данных, те например поток входит в сервис передавая указатель на чужую локаль, куда ядро запишет данные. Так нельзя делать, это создание уязвимости. Если у тс есть окна, то он первым делом начнёт передавать таким образом указатели опять же на локальные переменные, при этом открыв возможность атаки - тогда из другого процесса можно передать произвольный указатель. Так и была когда то давно реализована атака на shelltray. Тема походу про написание дырявого кода. ----- vx |
|
Создано: 05 января 2020 02:32 · Личное сообщение · #22 |
|
Создано: 05 января 2020 09:30 · Личное сообщение · #23 difexacaw пишет: В этом смысл - посылка нотифи в ожидающий обьект, поток выйдет из сна и получит данные; при этом событии стек сместится вниз, так как всякое сообщение доставляется как обратный вызов ядра с параметрами. Про что это вообще? Насколько я могу судить, с WM_COPYDATA весь геморрой с синхронизацией и доставкой n байт другому потоку винда берет на себя. Почему ты решил, что я предлагал указатель на локальную переменную этим передавать? Если пишешь что-то с прицелом на публикование, никакого подобного колхоза вообще быть не должно, а если какую-то утилитарную шляпу собственного покроя для личного поноса - абсолютно наплевать какие ужасные уязвимости оно содержит. ----- 2 оттенка серого |
|
Создано: 05 января 2020 13:01 · Личное сообщение · #24 |
|
Создано: 05 января 2020 13:44 · Личное сообщение · #25 difexacaw пишет: А для этого нужно передать в функцию обмена данными указатель на эту область... ... и размер данных. И винда скопирует эти данные в другой контекст. Так же, как ты можешь использовать WM_SETTEXT с другим окном, при этом если окно в другом процессе, туда улетает LPARAM не из твоего адресного пространства. |
|
Создано: 05 января 2020 13:56 · Личное сообщение · #26 |
|
Создано: 05 января 2020 14:02 · Личное сообщение · #27 |
|
Создано: 05 января 2020 14:04 · Личное сообщение · #28 |
|
Создано: 05 января 2020 14:10 · Личное сообщение · #29 difexacaw Кому нужно? ТС просто идиот и не может внятно сформулировать задачу. В примере, что он выше привел, никакого "хранения на стеке" нет; выделяется структура с параметрами на куче и ее адрес передается в функции потоков. Единственная проблема там в том, что он неправильно управляет временем жизни структуры и все это упадет с эксепшеном, если луна в ненужной фазе будет. |
|
Создано: 05 января 2020 20:27 · Личное сообщение · #30 |
. 1 . 2 . 3 . >> |
eXeL@B —› Программирование —› Формат для передачи данных между потоками |
Эта тема закрыта. Ответы больше не принимаются. |