Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› Как передать управление потоку в другой программе?
Посл.ответ Сообщение

Ранг: 11.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 января 2008 16:59
· Личное сообщение · #1

Пусть моя программа называется My.exe. Чужая прога называется Program.exe. В ней есть поток PrThread.
Как мне из моей программы My.exe передать управление в поток PrThread? Желательно чтобы эта передача управления происходила моментально.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 08 января 2008 17:07
· Личное сообщение · #2

Поток принадлежит процессу, как это ты собрался взять и перелезть в другой процесс? Юзай инжект длл что ли, не совсем то, но всё же. Топику место в другом подфоруме.



Ранг: 11.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 января 2008 19:00
· Личное сообщение · #3

мне просто надо чтобы была приостановлена работа текущего потока и как можно быстрее (желательно моментально) управление было передано на определенный поток в другом процессе.



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 08 января 2008 20:00 · Поправил: tempread
· Личное сообщение · #4

shob_vas
Подробно я конечно не расскажу, но если иметь много времени и желания, то делай так, как делает арма - своей програмой отлаживай другую программу, и при определенных условиях стопай отлаживаемую программу и дальше делай все что хочешь. Вот только наверняка тебе нужно что-то другое, опиши подробно, что именно ты там делаешь.



Ранг: 11.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 января 2008 20:09
· Личное сообщение · #5

tempread
К тому процессу прикреплена некоторыя нужная мне длл. Мне надо из под того процесса вызвать эту функцию и передать значение (результат в другой процесс (мой)). Только сделать это надо не один раз, а постоянно. То есть вариант с потоком (в том процессе) который будет сидеть и ждать пока не изменится какая нибудь переменная а потом вызывать функцию не подходит.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 09 января 2008 05:54
· Личное сообщение · #6

shob_vas пишет:
К тому процессу прикреплена некоторыя нужная мне длл. Мне надо из под того процесса вызвать эту функцию и передать значение (результат в другой процесс (мой)). Только сделать это надо не один раз, а постоянно

тогда тебе надо будет реализовать interprocess communication (IPC). Сделать это модно исмользуя pipe, windows message или socket.




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 09 января 2008 08:08
· Личное сообщение · #7

пишите базонезависимый код, который буит находить библу, получать в ней нужные функи и исполнять их.. потом инжект его в program.exe, CreateRemoteThread, там полученный результат пусть через WriteProcessMemory записываецо в АП my.exe и всё.

з.ы. если ты все это напишешь - ты извращенец :D

-----
invoke OpenFire





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 09 января 2008 17:49 · Поправил: HoBleen
· Личное сообщение · #8

Можно попробовать через евенты реализовать - второй процесс ждет евент. Когда поток первого процесса выставляет этот евент, то поток из второго процесса тут же должен очнуться. То же самое, только более извращенный способ предлагает tempread =)




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 09 января 2008 22:58 · Поправил: s0larian
· Личное сообщение · #9

HoBleen, прав, "именной" event можно создать в одном процессе и получить в друом. Но этого мало - надо ведь ещё и данные послать/получить. Конечно, можно извратится с (Read/Write)ProcessMemory но это бессмысленно т.к. это есть переписывание named pipe.




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 10 января 2008 00:26
· Личное сообщение · #10

HoBleen я почему то так понял, что второй поток это стороняя программа. Как она будет ждать event? Кто её об этом попросит? ))) Или я чото непонял..

-----
invoke OpenFire





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 10 января 2008 11:24
· Личное сообщение · #11

s0larian пишет:
Но этого мало - надо ведь ещё и данные послать/получить.

Я отвечал на 1й пост ТС - как быстрее передать управление) Если передавать управление с параметрами, то, наверное да, лучше пайпов ничего нет.

Ice-T
shob_vas пишет:
К тому процессу прикреплена некоторыя нужная мне длл. Мне надо из под того процесса вызвать эту функцию и передать значение (результат в другой процесс (мой)).

Т.о. мы имеем власть во 2м процессе.



Ранг: 11.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 января 2008 15:29
· Личное сообщение · #12

в обоих процессах есть мой тред, которым я могу управлять.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 10 января 2008 21:28
· Личное сообщение · #13

shob_vas, RTFM: named pipe.



Ранг: 30.2 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 11 января 2008 13:40
· Личное сообщение · #14

shob_vas
Если тебе нужно тупо передать что то из одного процесса в другой и есть своя библа , то юзай Шаред мемори shared memory в гугле.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 11 января 2008 22:37
· Личное сообщение · #15

undb, шеард И ты советуешь ему реализовать IPC через shared memory и event? Можно, но зачем в пустую тратить время?



Ранг: 11.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 12 января 2008 00:30
· Личное сообщение · #16

про shared мемори я прочитал еще до того как написать этот топик. Я через него и думаю передавать данные. вопрос весь в том как передать управление другому потоку с наименьшими затратами времени.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 12 января 2008 03:25
· Личное сообщение · #17

shob_vas, SetEvent(named_event); WaitForSingleObject(named_event); это и есть IPC.


 eXeL@B —› Вопросы новичков —› Как передать управление потоку в другой программе?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати