У меня есть программа без документации. Мне интересно, есть ли способ узнать, есть ли у него какой-либо интерфейс для межпроцессного взаимодействия. Существуют ли инструменты для поиска в исполняемом файле для обнаружения таких интерфейсов? Мне интересно узнать что-нибудь о такой программе, например, поддерживает ли она какие-либо параметры или аргументы командной строки или что-либо еще, что может быть обнаружено.
Я в основном использую Linux, и некоторые из программ, с которыми я хотел бы взаимодействовать, — это программы Windows, работающие через Wine. Я программирую на C и C ++, и немного Python.
Связанный вопрос; Есть ли способ программно симулировать нажатие кнопки в каком-то другом окне на экране компьютера?
Обнаружение интерфейса IPC / механизмов IPC для недокументированной программы может включать сбор большого количества информации различными способами, сбор ее вместе и отображение информации.
ipcs
Команда может быть использована для получения информации обо всех объектах ipc. Он должен предоставлять информацию о текущих активных очередях сообщений, сегментах общей памяти и семафорах. Это доступно как часть util-linux
,
Другой вариант — искать shm
папка в /proc/
просмотреть список активной в данный момент разделяемой памяти, используемой до и после запуска вашей программы.
FIFO — это специальные файлы, созданные с помощью mkfifo, которые вы можете определить по типу файла. p
в ls-l
выход. Также вы можете использовать -p
возможность проверить, является ли file
это труба.
/proc/<pid>/fd
может помочь собрать больше информации. lsof
это очень удобный инструмент, который может дать вам список открытых файлов и процессов, которые их открыли. Он может перечислить PID, PGID, PPID, владельца процесса, команду, которая выполняется процессом, и файлы, которые используются процессом.
fuser
может предоставить вам список PID, которые используют определенные файлы или файловые системы.
top/htop
дает вам список процессов, которые выполняются в вашей системе. Это может дать широкий спектр информации, начиная от приоритета процессов в форме NI
использование памяти через REM
или же MEM
,
iotop
может предоставить таблицу текущего использования ввода-вывода процессами или потоками в системе, отслеживая вывод информации об использовании ввода-вывода ядром.
mpstat
может дать «процент времени, в течение которого центральный процессор или процессоры простаивали, в течение которого система имела невыполненный запрос дискового ввода-вывода» через аргумент «iowait».
strace
должен перехватывать / записывать системные вызовы, которые вызываются процессом, а также сигналы, полученные процессом. Strace сможет показывать порядок событий и все пути возврата / возобновления вызовов.
LTTng
представляет собой комбинацию функций kprobes, tracepoint и perf, которые могут помочь в отслеживании прерываний и условий гонки.
Некоторые программы Windows используют DCOM для межпроцессного взаимодействия. Существует несколько программ для извлечения этого интерфейса из DLL- и EXE-файлов.
В противном случае вам придется разобрать программу и посмотреть на код напрямую, что не является тривалом.
На ваш последний вопрос:
Программы Windows используют систему сообщений для связи с GUI. Ты можешь использовать sendmessage
для имитации любого сообщения, например нажатия кнопки.