v1le #3841 Posted July 31, 2022 Есть программисты тут? С\С++. OS: Windows (используется WINAPI) Вот есть такая картинка: Описание: Есть некая библиотека (API.dll), у которой экспортированы функции (F1, F2). Есть 2 приложения (APP1, APP2) и обработчики запросов API (hanlder1, handler2). APP1 запрашивает выполнение функции F1 и ждёт ответа. В это время API.dll перебрасывает запрос на handler1 и ждет ответа, и по ответу от handler1 он возвращает результат вызова в APP1. APP2 выполняет тоже самое, но вызывается handler2. Это делается параллельно. Теперь вопрос: Если результат функции APP1 не был возвращен, то по факту функция не выполнена ещё и return выполнен не был. Каким образом APP2 получает доступ к той же функции, если там уже висит запрос от APP1? Почему: Я эмулирую работу handler1, handler2 и мне нужно, чтобы функция не возвращала результат сразу, поэтому я делаю тупо Sleep в экспортированной функции. Но таким образом запрос от APP2 не выполняется, так как там уже занято (не был выполнен return). При этом реальное приложение каким-то образом такие ситуации обрабатывает - не могу понять как. Quote Лучшая в этом мире Лучшая в мире читает стихиhttps://www.youtube.com/watch?v=YmAyJ7qaw7A Эксперт в религии Share this post Link to post
DANIS[Oo] #3842 Posted July 31, 2022 не знаю как си, но это разве делается в одной сессии? т.е. разве у каждого обращения APP1 и APP2 не будет свой поток со своим стеком? Quote Share this post Link to post
v1le #3843 Posted July 31, 2022 DANIS[Oo] написал 9 минут назад: не знаю как си, но это разве делается в одной сессии? т.е. разве у каждого обращения APP1 и APP2 не будет свой поток со своим стеком? Я вот тоже не знаю. Эксперимент показал, что я не получаю ответ во вторую приложуху, пока у меня Sleep от первого запроса не оттикает. Quote Лучшая в этом мире Лучшая в мире читает стихиhttps://www.youtube.com/watch?v=YmAyJ7qaw7A Эксперт в религии Share this post Link to post
DANIS[Oo] #3844 Posted July 31, 2022 может там слип запускается в тразнакционном методе, который обращается к общему ресурсу тогда второй поток будет ждать, пока первый освободит ресурс Quote Share this post Link to post
v1le #3845 Posted July 31, 2022 DANIS[Oo] написал 1 час назад: может там слип запускается в тразнакционном методе, который обращается к общему ресурсу тогда второй поток будет ждать, пока первый освободит ресурс Слип запускается у меня в транзакционном методе - всё верно. Но как сделать так, чтоб второй не ждал? Quote Лучшая в этом мире Лучшая в мире читает стихиhttps://www.youtube.com/watch?v=YmAyJ7qaw7A Эксперт в религии Share this post Link to post
DANIS[Oo] #3846 Posted July 31, 2022 v1le написал 8 минут назад: DANIS[Oo] написал 1 час назад: может там слип запускается в тразнакционном методе, который обращается к общему ресурсу тогда второй поток будет ждать, пока первый освободит ресурс Слип запускается у меня в транзакционном методе - всё верно. Но как сделать так, чтоб второй не ждал? я слаб в многопоточке, но на сколько знаю, у объектов есть что-то типо монитора, по которому определяется занят ресурс или нет, возможно его нужно будет отключать вручную, но тогда нарушится одно из свойств транзакционности, т.е. в начале потока у общего ресурса было одно значение, а потом, по середине выполнения, стало другое. мне кажется, нужно ввести таймаут на операцию, скажем, если это подключение к БД, тогда, при превышении этого времени, поток будет падать с ошибкой, а второй продолжит работу Quote Share this post Link to post
Kant #3847 Posted July 31, 2022 у тебя у каждого приложения своя память и свой поток им поебать максимально что кто-то другой юзает твою апи.длл, у них своя копия Quote Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью. Share this post Link to post
GoldRobot #3848 Posted July 31, 2022 v1le написал 2 часа назад: Если результат функции APP1 не был возвращен, то по факту функция не выполнена ещё и return выполнен не был. Каким образом APP2 получает доступ к той же функции, если там уже висит запрос от APP1? Если я сру через жопу, то как кто-то может срать через жопу паралельно со мной? То что ты нарисовал на схемке говорит что у тебя два приложения, у каждого из них подгруженна либа. Либа это, очено грубо, просто набор функций. Оно, очень грубо, ничем не отличается от тех функций которые ты в своем приложении прямо в коде объявишь и опишешь. И логика работы с ними та же самая. Так что выкини в своем вопросе уточнения про ddlку, ответь так как буд-то это просто функции в коде, и ответишь сам себе. Quote ward написал 04.01.2022 в 02:54: Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все. mazt3r написал 20.09.2019 в 11:27: ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног. Share this post Link to post
Rintz #3849 Posted July 31, 2022 v1le said 1 hour ago: DANIS[Oo] said 2 hours ago: может там слип запускается в тразнакционном методе, который обращается к общему ресурсу тогда второй поток будет ждать, пока первый освободит ресурс Слип запускается у меня в транзакционном методе - всё верно. Но как сделать так, чтоб второй не ждал? я б тебе за такие вопросы пизды дал CriErr, DANIS[Oo], GoldRobot and 1 other like this Quote Share this post Link to post
Guest Президент Nill Kiger #3850 Posted July 31, 2022 (edited) Как как. У каждого процесса своя виртуальная память. В виртуальную память чужого процесса ты можешь залезть толькоч через WriteProcessMemory ReadProcessMemory и низлежащие недокументированные функции ntdll. Можно еще внедриться в чужой процесс через инжект дллки, которая будет чувствовать себя в чужом процессе как дома. Абстрактно, на уровне юзерспейса - каждому процессу в память копируется своя коппия дллки. По крайней мере каждый процесс так думает. На уровне ядра в целях экономии памяти коппия создается только для процессов, которые перезаписывают в своей виртуальной памяти какие то байты дллки, что бывает крайне редко. copy on write. Экспорируемая функция 1 будет выполняться каждая в своём процессе и в своём потоке, в своём стеке. Каждому потоку будет выдан своё квант выполнения, в который они эту функцию прокрутят. Пробегутся рипом (инстракшн поинтером по адресам кода дллки). Когда они это будет делать - на какой стадии выполнение одной функции, на какой другой, одноврменно в разных потоках многоядерного процессора, вообще не ебёт их это, они никак не связаны. v1le said 7 hours ago: Если результат функции APP1 не был возвращен, то по факту функция не выполнена ещё и return выполнен не был. Каким образом APP2 получает доступ к той же функции, если там уже висит запрос от APP1? функция это кусок кода в памяти просто валяющийся. К ней не нужно какой то магический досутп получать. Доступ это просто то что ты знаешь адрес этой функции в загруженной дллке в своем процессе и можешь на неё jmp / call сделать. Edited July 31, 2022 by Президент Nill Kiger Quote Share this post Link to post
GoldRobot #3853 Posted August 1, 2022 Традиция Quote ward написал 04.01.2022 в 02:54: Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все. mazt3r написал 20.09.2019 в 11:27: ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног. Share this post Link to post
madvlaydin #3854 Posted August 1, 2022 Президент Nill Kiger написал 9 часов назад: Как как. У каждого процесса своя виртуальная память. В виртуальную память чужого процесса ты можешь залезть толькоч через WriteProcessMemory ReadProcessMemory и низлежащие недокументированные функции ntdll. Можно еще внедриться в чужой процесс через инжект дллки, которая будет чувствовать себя в чужом процессе как дома. Абстрактно, на уровне юзерспейса - каждому процессу в память копируется своя коппия дллки. По крайней мере каждый процесс так думает. На уровне ядра в целях экономии памяти коппия создается только для процессов, которые перезаписывают в своей виртуальной памяти какие то байты дллки, что бывает крайне редко. copy on write. Экспорируемая функция 1 будет выполняться каждая в своём процессе и в своём потоке, в своём стеке. Каждому потоку будет выдан своё квант выполнения, в который они эту функцию прокрутят. Пробегутся рипом (инстракшн поинтером по адресам кода дллки). Когда они это будет делать - на какой стадии выполнение одной функции, на какой другой, одноврменно в разных потоках многоядерного процессора, вообще не ебёт их это, они никак не связаны. v1le написал 17 часов назад: Если результат функции APP1 не был возвращен, то по факту функция не выполнена ещё и return выполнен не был. Каким образом APP2 получает доступ к той же функции, если там уже висит запрос от APP1? функция это кусок кода в памяти просто валяющийся. К ней не нужно какой то магический досутп получать. Доступ это просто то что ты знаешь адрес этой функции в загруженной дллке в своем процессе и можешь на неё jmp / call сделать. сколько деняк получаешь? можно в джаст дуитах по старому курсу (1дд = 100к рублей), можно в голроботах по старому курсу (1грб = 60к деревянных) Quote Share this post Link to post
GoldRobot #3855 Posted August 1, 2022 madvlaydin написал 2 минуты назад: можно в голроботах по старому курсу (1грб = 60к деревянных) Я ваш попрошу! Нет такой валюты как грб. Есть Олд Голд Робот. ОГР. 1 ОГР = 60к деревянных. Нынешняя молодеж меня пугает конечно переодически, а потом в биткоины деньги несут. Kant likes this Quote ward написал 04.01.2022 в 02:54: Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все. mazt3r написал 20.09.2019 в 11:27: ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног. Share this post Link to post
madvlaydin #3856 Posted August 1, 2022 GoldRobot написал 2 минуты назад: madvlaydin написал 6 минут назад: можно в голроботах по старому курсу (1грб = 60к деревянных) Я ваш попрошу! Нет такой валюты как грб. Есть Олд Голд Робот. ОГР. 1 ОГР = 60к деревянных. Нынешняя молодеж меня пугает конечно переодически, а потом в биткоины деньги несут. да бля давно деньги не обсуждали, уже и забылись наменования валют, это как RUB и RUR Показать содержимое бля чё та копейки получаю какие-то Quote Share this post Link to post
Stepa_Babikov #3857 Posted August 1, 2022 полгода назад кто-то мне предлагал рефку в авито в этом топане, найдись друг Время пришло Quote Share this post Link to post
ural1qqq #3858 Posted August 1, 2022 кто то хранит в доларах и живет в россии при этом одновременно? Quote Share this post Link to post
Guest Президент Nill Kiger #3859 Posted August 1, 2022 madvlaydin said 7 hours ago: сколько деняк получаешь? можно в джаст дуитах по старому курсу (1дд = 100к рублей), можно в голроботах по старому курсу (1грб = 60к деревянных) нолик получаю. Ни разу в компаниях не работал, да и не нужен я им особо. Сидит хаэр, ищет синиора, мою заявку смотрит - работал НИГДЕ и гитхаб пустой. Там до технического собеседования и не дойдёт. К которому готовиться минимум месяц. Мне что щас с серьезным ебалом сидеть алгоритмы вспоминать и задачки решать ? К тому же я гитом пользуюсь плохо. В мастер ветке всё делаю и мне комфортно. Никакие методологии разработки не известны. Временами бывает желание поработать где нибудь, потому что офисная атмосфера минимизирует прокрастинацию, я бы там отчасти и своими идеями занимался. Но щас если куда то идти, то это МАКСИМУМ мидлом в среднюю компанию на 150к, в которой ваще всем похуй. Я сам на своих проектах больше имею гораздо, но это нестабильно. Условно с февраля ни рубля не зафармил. Если работать где то, то для себя вижу например эту вакансию. https://www.valvesoftware.com/en/jobs?job_id=12 Мне было бы интересно там поработать неважно за какие деньги. Ради этой вакансии условно месяц я бы потратил на подготовку. Но английский разговорный за месяц я точно не осилю. Или вот слышал, что можно условно быть мейнтейнером в ядро линукс и тебе зарплату редхат платят, просто сидишь дома занимаешься что тебе и так интересно. А не помогаешь строить другим людям их бизнес за крупицу денег. Щас подумываю впн свой сервис сделать на уровне протонмеил тоже с онион доменам. Впны работать на gentoo/openbsd будут. Quote Share this post Link to post
Rooster #3860 Posted August 1, 2022 (edited) Президент Nill Kiger said 18 minutes ago: madvlaydin said 8 hours ago: сколько деняк получаешь? можно в джаст дуитах по старому курсу (1дд = 100к рублей), можно в голроботах по старому курсу (1грб = 60к деревянных) нолик получаю. Ни разу в компаниях не работал, да и не нужен я им особо. Сидит хаэр, ищет синиора, мою заявку смотрит - работал НИГДЕ и гитхаб пустой. Там до технического собеседования и не дойдёт. К которому готовиться минимум месяц. Мне что щас с серьезным ебалом сидеть алгоритмы вспоминать и задачки решать ? К тому же я гитом пользуюсь плохо. В мастер ветке всё делаю и мне комфортно. Никакие методологии разработки не известны. Временами бывает желание поработать где нибудь, потому что офисная атмосфера минимизирует прокрастинацию, я бы там отчасти и своими идеями занимался. Но щас если куда то идти, то это МАКСИМУМ мидлом в среднюю компанию на 150к, в которой ваще всем похуй. Я сам на своих проектах больше имею гораздо, но это нестабильно. Условно с февраля ни рубля не зафармил. Если работать где то, то для себя вижу например эту вакансию. https://www.valvesoftware.com/en/jobs?job_id=12 Мне было бы интересно там поработать неважно за какие деньги. Ради этой вакансии условно месяц я бы потратил на подготовку. Но английский разговорный за месяц я точно не осилю. Или вот слышал, что можно условно быть мейнтейнером в ядро линукс и тебе зарплату редхат платят, просто сидишь дома занимаешься что тебе и так интересно. А не помогаешь строить другим людям их бизнес за крупицу денег. Щас подумываю впн свой сервис сделать на уровне протонмеил тоже с онион доменам. Впны работать на gentoo/openbsd будут. @hira88 Я нашёл твоего брата Edited August 1, 2022 by Rooster MeineMethode, DeadMage, m()stEVIL and 8 others like this Quote Share this post Link to post