LINUX.ORG.RU

История изменений

Исправление ruzisufaka, (текущая версия) :

Вроде бы то, я попробую чуть позже переосмыслить и переписать первый пост.

Пока же вот мои размышления в 3 часа ночи о том, как жить дальше:

  • Для начала залезть в процесс (LD_PRELOAD? Valgrind? my_cool_instrumentation.h + my_cool_lib.a?)
  • Найти в процессе интересующий файл (Подменить собой read/fread?)
  • Если не нашли, просканировать всю аллоцированную память, поискать кусочки исследуемого файла (вдруг файл как-то кусочками подгружался и я его пропустил?). Героически побороться с чем-то похожим на ASLR, чтобы адреса не прыгали.
  • Перехватить обращение к этой памяти (или изобрести свой malloc, повесить обработчик исключений на себя и при каждом эксепшене что-то самостоятельно делать, или заюзать валгринд?)
  • Как-то размотать стек, узнать где мы находимся, как зовут текущую функцию, номер строки в файле исходников (читать рядом лежащий dwarf?)

Вроде бы ничего больше для счастья и не надо. Ну, по крайней мере пока. К примеру, надо будет конечно найти не только обращения вида databuf[123], но и somestruct.some_field и как-то их различать, а на самодельном аллокаторе с эксепшенами это будет непросто.

Пока же это больше фантазии в 3 часа ночи и последствия просмотра чего-то вроде https://youtu.be/lLEcbXidK2o

Исправление ruzisufaka, :

Вроде бы то, я попробую чуть позже переосмыслить и переписать первый пост.

Пока же вот мои размышления в 3 часа ночи о том, как жить дальше:

  • Для начала залезть в процесс (LD_PRELOAD? Valgrind? my_cool_instrumentation.h + my_cool_lib.a?)
  • Найти в процессе интересующий файл (Подменить собой read/fread?)
  • Если не нашли, просканировать всю аллоцированную память, поискать кусочки (вдруг файл как-то кусочками подгружался и я его пропустил?). Героически побороться с чем-то похожим на ASLR, чтобы адреса не прыгали.
  • Перехватить обращение к этой памяти (или изобрести свой malloc, повесить обработчик исключений на себя и при каждом эксепшене что-то самостоятельно делать, или заюзать валгринд?)
  • Как-то размотать стек, узнать где мы находимся, как зовут текущую функцию, номер строки в файле исходников (читать рядом лежащий dwarf?)

Вроде бы ничего больше для счастья и не надо. Ну, по крайней мере пока. К примеру, надо будет конечно найти не только обращения вида databuf[123], но и somestruct.some_field и как-то их различать, а на самодельном аллокаторе с эксепшенами это будет непросто.

Пока же это больше фантазии в 3 часа ночи и последствия просмотра чего-то вроде https://youtu.be/lLEcbXidK2o

Исправление ruzisufaka, :

Вроде бы то, я попробую чуть позже переосмыслить и переписать первый пост.

Пока же вот мои размышления в 3 часа ночи о том, как жить дальше:

  • Для начала залезть в процесс (LD_PRELOAD? Valgrind? my_cool_instrumentation.h + my_cool_lib.a?)
  • Найти в процессе интересующий файл (Подменить собой read/fread?)
  • Если не нашли, просканировать всю аллоцированную память, поискать кусочки (вдруг файл как-то кусочками подгружался и я его пропустил?)
  • Перехватить обращение к этой памяти (или изобрести свой malloc, повесить обработчик исключений на себя и при каждом эксепшене что-то самостоятельно делать, или заюзать валгринд?)
  • Как-то размотать стек, узнать где мы находимся, как зовут текущую функцию, номер строки в файле исходников (читать рядом лежащий dwarf?)

Вроде бы ничего больше для счастья и не надо. Ну, по крайней мере пока. К примеру, надо будет конечно найти не только обращения вида databuf[123], но и somestruct.some_field и как-то их различать, а на самодельном аллокаторе с эксепшенами это будет непросто.

Пока же это больше фантазии в 3 часа ночи и последствия просмотра чего-то вроде https://youtu.be/lLEcbXidK2o

Исходная версия ruzisufaka, :

Вроде бы то, я попробую чуть позже переосмыслить и переписать первый пост.

Пока же вот мои размышления в 3 часа ночи о том, как жить дальше:

  • Для начала залезть в процесс (LD_PRELOAD? Valgring? my_cool_instrumentation.h + my_cool_lib.a?)
  • Найти в процессе интересующий файл (Подменить собой read/fread?)
  • Если не нашли, просканировать всю аллоцированную память, поискать кусочки (вдруг файл как-то кусочками подгружался и я его пропустил?)
  • Перехватить обращение к этой памяти (или изобрести свой malloc, повесить обработчик исключений на себя и при каждом эксепшене что-то самостоятельно делать, или заюзать валгринд?)
  • Как-то размотать стек, узнать где мы находимся, как зовут текущую функцию, номер строки в файле исходников (читать рядом лежащий dwarf?)

Вроде бы ничего больше для счастья и не надо. Ну, по крайней мере пока. К примеру, надо будет конечно найти не только обращения вида databuf[123], но и somestruct.some_field и как-то их различать, а на самодельном аллокаторе с эксепшенами это будет непросто.

Пока же это больше фантазии в 3 часа ночи и последствия просмотра чего-то вроде https://youtu.be/lLEcbXidK2o