2012-05-19 5 views
0

Можно ли использовать крючки для перехода в другую рабочую память процесса, а затем отскакивать назад, не имея ничего подобного инъекции DLL?Взаимодействие между процессами

Например, если процесс A имеет процедуру foo и процесс B имеет процедуру bar с идентичным прототипом к foo (используется для крючка), можно подключить foo к JMP, чтобы bar, предполагая, что оба процесса работает ?

EDIT: Это необходимо сделать в Windows.

+1

Возможно, вас это заинтересует [этот вопрос и мой ответ] (http://stackoverflow.com/q/10487165/968261). –

+0

Кстати, мы говорим о Windows, верно? –

+0

@Alex - Да, Windows. Я добавлю, что там. Я сейчас нахожусь в ссылке. – Qix

ответ

2

Процесс по определению представляет собой песочницу. Если вы по ошибке ошибаетесь за пределами своего адресного пространства, он поднимается и вызывается как сигнал SIG_USR и сообщается как ошибка сегментации.

Сказав, что существуют механизмы взаимодействия между процессами, такие как общая память -shmem, Pipes и сокеты, которые вы можете использовать использовать для общения через процессы.

Редактировать: Имеются также механизмы RPC (удаленные процедуры), такие как CORBA, которые обеспечивают удаленный вызов метода.

+0

Можно ли выполнить общую память? – Qix

+0

@ Di-0xide: если вы отметите его как исполняемый файл. – Dani

+0

@ Дани: Я не уверен, как бы вы пометили общую память как исполняемую. Как правило, '.txt' исполняемого файла загружается в память, и только это может быть выполнено. Что можно сделать, мы можем получить некоторую потертую память из os и написать там некоторые инструкции, а из вашего кода сделать переход на этот адрес, чтобы выполнить его. но все же он будет виден только для вашего процесса и любых процессов, которые также получают доступ к этой общей памяти. –

1

Каждый процесс в Windows (а также в Unix и, возможно, в большинстве других современных ОС) имеет собственное пространство виртуальной памяти, которое обычно сопоставляется с разными физическими адресами. Следовательно, инъекция DLL в адресное пространство другого процесса - единственный способ связать что-либо в этом процессе. С другой стороны, когда у вас есть DLL в этом процессе, есть много вещей, которые вы можете сделать там, например. создайте свой собственный поток и общайтесь с родительским процессом, используя сообщения Windows (как один из самых простых способов общения в Windows).

Смежные вопросы