Поиск кода программы в памяти с помощью C - PullRequest
0 голосов
/ 11 февраля 2009

Если у меня есть программа форматирования строк на C, которая состоит только из одного файла, можно ли найти, где этот файл находится в памяти, и позволить запущенной программе обработать свой собственный исходный файл?

Когда программа на C запускается, возможно ли определить указатель, который указывает на реальный код, и обработать его?

Я не хочу открывать и читать исходный файл, но делаю это из памяти.

Ответы [ 4 ]

1 голос
/ 11 февраля 2009

Вы имеете в виду, что ваша программа анализирует машинный код? Или C источник?

Ваша C-программа после компиляции больше не находится в C, поэтому работающая программа будет в машинном коде, а не в C.

Почему вы не хотите открыть исходный файл с диска?

1 голос
/ 11 февраля 2009

Не знаю, правильно ли я понял вопрос, но я попробую:

Вы можете получить доступ к пути к исходному файлу вашего программного обеспечения на C с помощью директивы __FILE__. Использование его в целях, отличных от его отображения, означает, что он не перемещался и не исчезал со времени последней компиляции.

1 голос
/ 11 февраля 2009

Обычно C компилируется перед запуском. Это означает, что исходный код транслируется в исполняемые машинные инструкции. Таким образом, исходный код, вероятно, недоступен в памяти при запуске программы.

0 голосов
/ 27 сентября 2013

Когда программа на C запускается, возможно ли определить указатель, который указывает на фактический код, и обработать его?

Полагаю, вы могли бы взять адрес функции, используя указатель функции, и прочитать / записать, приведя его к целочисленному указателю. Однако это было бы весьма необычно, сложно и опасно по многим причинам. Для написания кода машинный код может находиться в разделе памяти, доступном только для чтения. Более того, вам придется записывать машинный код в память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...