Delphi изменение значений констант откомпилированного файла

Тема в разделе "Другие языки", создана пользователем 2pick, 6 май 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. 2pick

    2pick Постоялец

    Регистр.:
    15 мар 2009
    Сообщения:
    102
    Симпатии:
    29
    Подскажите как изменить значение констант в уже откомпилированном файле с помощью другой программы. Т.е. необходимо создать своего рода конфигуратор для готовой программы. Может где-то написано, но к сожалению я не нашел.
     
  2. Ratko

    Ratko Постоялец

    Регистр.:
    13 сен 2008
    Сообщения:
    92
    Симпатии:
    21
    Мне кажется - только дизасемлером. Мне кажется, для Делфи лутше DeDe.
    А перекомпилировать проект не получится? а то с дизасемблером возится довольно хлопотно. Конечно, все зависит от сложности проекта.
     
  3. 2pick

    2pick Постоялец

    Регистр.:
    15 мар 2009
    Сообщения:
    102
    Симпатии:
    29
    Перекомпедировать то можно, но хочется чтобы пользователь программы сам задавал конфиги (именно в самой программе, не через реестр). Были такие конфигурационные программы (например трояны шли с 3-мя файлами: сервер,клиент и конфигуратор сервера и редактировалась именно откомпилированная программа)
     
  4. Ratko

    Ratko Постоялец

    Регистр.:
    13 сен 2008
    Сообщения:
    92
    Симпатии:
    21
    Так в чем проблема? Храните в дополнительном файлике все необходимые настройки.
     
  5. myweb

    myweb Среда обитания WEB

    Регистр.:
    10 сен 2007
    Сообщения:
    539
    Симпатии:
    246
    Думаю вам поможет в етом http://s0m.narod.ru/neos0m.html
     
  6. dragon1979

    dragon1979 Создатель

    Регистр.:
    6 ноя 2008
    Сообщения:
    13
    Симпатии:
    1
    Можно хранить файлы настроики в отдельной (или основной базе) и настраивать основную программу через отдельную утилиту конфигурации. Основная программа при запуске будет считывать данные с этой базы.
    Конечно такое можно быстренько организовать если прога своя и есть исходники.
     
  7. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    У вас неопределенно описаны условия задачи. Возникает много уточняющих вопросов:

    1) Что вы называете константой? Значение, описанное в программе как const var_name: type; или это некая неименованная константа в некоем цикле while (i < 1000) do begin... ? Сколько этих констант? Вы знаете местонахождение этих констант в exe/dll-файле или их еще надо там найти?
    2) Откомпилированный файл свой или чужой? Исходники есть? (я уж не спрашиваю, почему не делается изменение констант с помощью самой программы, видимо, есть на то причины)

    Если у вас все свое и нужно сделать свой конфигуратор, то в исходной программе можно сделать свои метки перед константами, чтобы в двоичном файле их можно было найти. Например:

    Код:
    var cIntParameter: ShortString = 'imetka'#0#0#0#0;
    function GetIntParameter: Integer;
    var p: PByte;
    begin
      p := @cIntParameter[1];
      Inc(p, 6);
      Result := PInteger(p)^;
    end;
    При обращении к параметру в программе используйте GetIntParametr();
    С помощью другой программы можно найти в двоичном файле фразу 'imetka', за которой следует 4 байта, куда и надо поместить значение.
     
Статус темы:
Закрыта.