Редактировать
Предполагая, что вы действительно ищете динамические данные (в отличие от того, что казалось в вашем примере :)), вы всегда можете просто работать с командами отладчика.Это потребует того, чтобы вы имели представление о возможном диапазоне памяти для сканирования (или вы просто получите бесполезные нарушения памяти):
Используйте команды gdb, конструкции цикла и функции libc
# assume 0x1234 is a likely base address, say for the heap
(gdb) set $x=0x1234
(gdb) set $y = strdup("lookforthistext")
(gdb) while(0!=memcmp($x++, $y, 15) && $x<0x4321)
>end
(gdb) p $x
(gdb) x $x
В этом примере сканируется область 0x1234 ... 0x4321 для первого совпадения и печатается / проверяется выходной адрес.
Вы можете использовать аналогичные приемы (strncpy
...?), Чтобы перезаписать память, если у вас был к ней доступ.Конечно, программа может резко потерпеть неудачу, если вы делаете такие вещи, как изменение длины подстроки .. YMMV).
Рассмотрите возможность сохранения ваших придуманных команд в виде скрипта (включите ведение журнала), используйте .gdbinit или даже создайте функции gdb; к сожалению, я мало что знаю о последнем)
Оригинальный ответ:
Вам "нужно"?Я сомневаюсь.Лучше всего работать с API окон / UI вашей операционной системы, чтобы получить фактическое окно, в котором отображается текст, и заставить его отображать другой текст (обычно отправляя ему соответствующие управляющие сообщения).Вам понадобится много возможностей COW (думаю: root), чтобы осуществить это.
Чтобы ответить на прямой вопрос:
Обычно такие сообщения являются константами (статическими данными).и как таковые либо
- присутствуют в сегменте данных
- считываются (страницы с отображением в памяти) из ресурсов
Оба из которых обычно (в наши дни)по крайней мере) в сегментах памяти только для чтения (подумайте о совместном использовании страниц, отображаемых в памяти; это дает ядру возможность обмениваться отображенными областями совместно используемых двоичных объектов между процессами - это также служит очевидным целям безопасности).
Вклверхняя сторона,
strings myprogram | grep 'Hello"
скажет вам, можете ли вы использовать sed
, hex hex или любой другой подходящий редактор для манипулирования двоичным файлом даже до его запуска.Здесь есть два недостатка:
- он не динамический (вы не можете изменить текст на лету)
- это может нарушить подпись кода (что означаетисполняемый файл может быть отклонен ОС, поскольку он был изменен).