LINUX.ORG.RU

Как переопределить поведение сисколов для определённого процесса?

 , ,


0

1

Хочу попробовать записать IO одного процесса (сокеты, файлы) и потом воспроизвести для другого процесса.

Т.е. если была записана работа с сокетом, и я включил проигрывание записанного IO, то когда процесс попытается работать с сокетом с теми же аргументами, то ему будут возвращаться те же самые ответы, что были записаны ранее. Фактически никакой сокет открываться не будет.

С записью как-нибудь разберусь. Для проигрывания записанного IO мне нужно уметь переопределять сисколы вроде recvfrom, read для отдельного процесса. Как такое делать, на каком уровне это можно решить?

Может такую запись и проигрывание IO уже кто-то сделал раньше?

Я понимаю что я могу сделать какую-то свою libc и подсунуть её процессу. Но это сработает только если процесс не пытается вызывать сисколы напрямую.

Есть какой-то более глубокий способ?

vladimir-vg ★★
() автор топика

Может такую запись и проигрывание IO уже кто-то сделал раньше?

Для одного процесса такое уже сделано в https://rr-project.org/.

Не представляю, как ты будешь это делать для разных процессов. Всё равно ведь будет работать, только если процесс, для которого проигрывают результаты системных вызовов, будет делать эти вызовы в нужном порядке. Небольшое отклонение в коде, и всё разойдётся по швам.

i-rinat ★★★★★
()

Посмотри ptrace syscall

anonymous
()
Ответ на: комментарий от i-rinat

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

vladimir-vg ★★
() автор топика
Ответ на: комментарий от vladimir-vg

большую часть времени

Если из многопоточных программ выбросить мьютексы, большую часть времени они будут работать нормально.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Спасибо за ссылку, похоже это то что мне было нужно

vladimir-vg ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.