Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/131: Рейтинг темы: голосов - 131, средняя оценка - 4.90
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2

Перехват и подмена вызываемых функций

09.08.2009, 03:57. Показов 26107. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Нужно подменить вызов таких функций как open(), lstat[64](), stat[64](), read(), write(), mkdir(), chdir(), getcwd() для определенного процесса.
Интересует мнение других. Как бы вы реализовали эту задачу.

Спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.08.2009, 03:57
Ответы с готовыми решениями:

Программа для определения функций WinAPI, вызываемых программой с GUI
Хотел бы узнать, какие функции Windows API вызывает программа с GUI. Какие программы позволяют это сделать? Хотелось бы, чтобы в программе...

Инлайн функций вызываемых через указатель на функцию
Есть контейнер функций #include <iostream> class container { using func = void(*)(); func arr; size_t index =...

Насколько хорошо компилятор производит оптимизацию часто вызываемых функций?
Например есть строчки из кода unsigned long Ly_char4(unsigned char S) { unsigned long Ly(S + 1013904223); Ly = Ly * 1664525 + S +...

25
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.08.2009, 12:34
Студворк — интернет-сервис помощи студентам
Я не понял, кто такой "демон" и откуда это "из него"

Про почитать - я уже писал, что я обходился без литературы, работая с иходниками gnu'того линкера, компилятора, glibc и т.п. А потому просто не знаю, где это может быть внятно написано
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.08.2009, 12:52  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Я не понял, кто такой "демон" и откуда это "из него"
Описываю процесс:
Есть программа, для которой я хочу подменить некоторые функции. К примеру mkdir(). Программа вызывает эту функцию, передавая ей "~/anypath". Мне нужно, чтоб моя версия mkdir() создала каталог "~/anyprefix_anypath". Но для каждого каталога префикс разный. По этому, в библиотеку я добавил функции которые снабжают ее(мою версию mkdir()) информацией, anypath -> anyprefix. При вызове mkdir(), она(моя версия функции) ищет соответствие полученного аргумента чтоб определить префикс. Для того чтоб снабжать функцию информацией, я написал программу(процесс, в будущем демон) которая посредством динамического связывания, управляет словарем соответствий в динамической библиотеки.

Пока писал, пришел вопрос. А не получится ли так, что создадутся две копии библиотеки?...по моему так и получится.... хз как в Линукс это происходит.
Поправьте пожалуйста.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.08.2009, 13:38
А зачем тебе для этого хачить _init?

Про две копии вопрос тоже не понял
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.08.2009, 13:45  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
А зачем тебе для этого хачить _init?
Есть переменные которые нужно проинициализировать. Но это не проблема.
Сделаю так:
Цитата Сообщение от niXman Посмотреть сообщение
вместо _init(), _fini() назову их к примеру myinit(), myfinish() и вызову их из процесса который обновляет таблицу соответствия.
Цитата Сообщение от Evg Посмотреть сообщение
Про две копии вопрос тоже не понял
Т.е. Одна для процесса который обновляет таблицу соответствия, а вторая, та которая подменяет функции.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.08.2009, 14:31
Если нужна нестатическая инициализация, то делается это через функцию-конструктор, для этого в gcc есть специальный атрибут

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int G;
 
void __attribute__((constructor))
func (void)
{
  G = 1;
}
 
int
main (void)
{
  printf ("G=%d\n", G);
  return 0;
}
Про две копии. Динамические библиотеки они не только динамические, но ещё и разделяемые. Т.е. если несколько процессов используют одну и ту же библиотеку, то в момент исполнения библиотека физически будет находиться в памяти в количестве одной штуки, а код будет мапироваться в виртуальную память каждого процесса. Это, потятное дело, касается только read-only частей: кода и константных глобальных данных

Если это именно то, что тебя интересовало
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.08.2009, 14:38  [ТС]
Понял.
Спасибо!
Скоро буду запускать. Поглядим-ка что из этой идеи получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2009, 14:38
Помогаю со студенческими работами здесь

Создать программу, которая состоит из отдельных функций, вызываемых к методе main ()
Задана не пустая последовательность слов из латинских букв. Последним символом этой послидновности является точка. Словам называются группы...

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

Перехват сетевых пакетов и их подмена
Как сделать программу имитирующую интернет. Например на моём компьютере программа отправляет пакет данных на определённый сервер по...

Перехват / подмена потока с микрофона
Здравствуйте! Во время онлайн-игры появилась задачка, которую хотелось бы поковырять на досуге. Суть такова. У меня есть...

Перехват и подмена имени .dll файла
есть программа, которая перебирает все процессы и их dll-ки и если встречает &quot;ProcHelpLib.dll&quot; убивает этот процесс. Можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru