Извините, это замечание предполагает, что вы работаете в системе Windows.Если нет, я уверен, что с другими исполняемыми форматами изображений вы можете использовать аналогичный метод.
Предполагается, что вы пытаетесь спросить, как вы изменяете данные в пределах цели, а не как, в этом конкретном примере, изменитьвывод на экран ...
Рассматривали ли вы просмотр PE-заголовка исполняемого образа?Вы можете перевести адрес определенного фрагмента данных после загрузки в память по его смещению в PE-файле, но взгляните на структуру IMAGE_SECTION_HEADER внутри PE-заголовка рассматриваемого изображения.
Сначала вычислитеRVA ваших данных в памяти.Это адрес данных относительно раздела, в котором он находится.
Во-вторых, индексируйте через структуры IMAGE_SECTION_HEADER внутри PE-заголовка исполняемого файла, считывая заголовок из файла в буфер.Как только вы загрузили этот заголовок в буфер памяти, вы можете обработать его с помощью указателей.Например,
IMAGE_NT_HEADERS* pImageHeader = &peHeaderBuffer[0];
Найдя правильный IMAGE_SECTION_HEADER, содержащий ваши данные, вы можете получить доступ к элементу структуры PointerToRawData, который даст вам смещение от начала PE-файла, в котором находится этот раздел,если вы добавите RVA, вы получите смещение от начала файла, из которого расположены ваши данные.
Очевидно, что мой ответ не объясняет, как индексировать заголовки разделов, так как это довольно утомительная задача, объяснение которой займет некоторое время.Я бы посоветовал вам взглянуть на PE-заголовок exectuable из простого отладчика, такого как OllyDbg, и обратиться к документации MSDN на PE-заголовке, которую можно найти здесь:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680336%28v=VS.85%29.aspx
Если все, что вы хотите сделать, это отменить эту информацию нашей цели, это очень легко сделать с помощью OllyDbg.Просто просматривайте заголовок PE, пока не увидите раздел, соответствующий вашим данным, и OllyDbg перечислит там элемент PointerToRawData, который вы можете добавить к своему RVA.