Имя: Пароль:
1C
 
Вопрос по структуре MD
Ø
0 ВоВаК
 
13.07.05
17:01
Уважаемые, я в полном ступоре. Подскажите кто нибудь во что упакованы потоки с текстом (такие как MD Program text) внутри составного файла и, это главное, как их распаковать чтобы они приняли читабельный вид.
1 Glide
 
13.07.05
17:05
ежель ты из ступора вышел - значит пора прочитать ЖКК
2 ВоВаК
 
13.07.05
17:19
Если можно, чуть конкретней. Какая глава какого тома?
3 Денис2
 
13.07.05
17:22
(0) А зачем?
4 Лисичка
 
13.07.05
17:25
не знаю поможет ли, но глянь http://1c.alterplast.ru/1cv7md/index.html
5 ВоВаК
 
13.07.05
17:34
Да тулузу пишу в свободное от работы время. Структуру составного файла разобрал, а как добрался до содержимого - тупик. Пробовал LZNT1, но он его не берёт. Может быть там заголовок какой идёт в начале?
6 Денис2
 
13.07.05
17:37
(5) Там, имхо, зип, но без заголовка :-)
А для точности возьми исходники gcomp'а из (4) и посмотри.
7 ВоВаК
 
13.07.05
17:37
(4) Не, это не то. Внутри MD-файла скрипты интерпретатора во что то упакованы. Как их распаковать?
8 Лисичка
 
13.07.05
17:40
не смотрела, но тут плагин к фару http://1c.alterplast.ru/files/fdb102.zip попробуй с помощью него, больше не знаю чем помочь...
9 ВоВаК
 
13.07.05
17:40
(6) Ага, попробуй там найди что то. Не мог бы ты меня ткнуть конкретно в место распаковки, а то я в ЦПП не особо силён.
10 fez
 
13.07.05
18:40
(9) Он прав, там зип без заголовка. Конкретно используется библиотека zlibeng.dll.
В GComp действительно сложно понять, как с этой библиотекой работать - там разные части вызовов по разным модулям разбросаны.
Более самостоятельный кусок есть в составе 1С++, а именно в методе CModuleString::LoadModule(), в последней версии это CModuleString::LoadModuleFromERT()
Могу сюда запостить, но только в обмен на рассказ об утилите. :)
11 fez
 
13.07.05
21:08
Короче меня задрало постоянно отвечать на одну и ту же просьбу выслать пример работы с zlibeng - поэтому я этот пример выложил.
http://1c.alterplast.ru/1cv7md/zlibeng.html
12 ВоВаК
 
13.07.05
23:24
 Спасибо, но не подходит. Во первых это привязывает к 1С, ну а если таскать библиотеку с собой, возможны проблемы с совместимостью и ада DLL.
 Есть запасной вариант. Плагин для FAR _mdbrowser.dll скорее всего использует Паскалевские UNZDLL.DLL и ZIPDLL.DLL версии 1.3 для распаковки текста в потоках. Эти библиотеки не имеют COM-интерфейса, а используют экспортируемые функции, что для меня более привлекательно. Может кто нибудь поделится примерчиком любого их использования (не обязательно приминительно к MD). Только для соответсвующих версий.
А тулуза пока самая простая - что то типа проводника.
http://basicproduction.nm.ru/TEMP/BPCC.rar
13 fez
 
13.07.05
23:43
(12) gcomp в сочетании с классическим проводником чем-то не устраивает? Позволь полюбопытствовать?
.
Кстати, за все время существования gcomp (ок. двух лет) мне стал известен только один случай, когда некто попытался запустить его на машине, где не было zlibeng. Так что этот фактор можно не рассматривать. Опять же - не вижу проблемы таскать с собой dll, ибо от ее версии IMHO ичего не зависит.
14 ВоВаК
 
14.07.05
01:04
 Почему не устраивает? :) Я просто раньше о нём никогда не слышал. Я в 1С всего 5 месяцев, а до этого только слово такое знал. Ни в коем случае не претендую на какую либо функциональность. Просто я изучал структурированное хранилище, а это, так сказать, практика. Никаких интерфейсов из OLE32 я не использую, всё на уровне секторов и таблиц блоков. Соответсвенно хотелось бы иметь сам алгоритм разархивирования (не важно в каком виде - Native DLL, бинарник или код на ЯВУ) не привязанный ни к чему и не являющийся потенциальным источником ада DLL.
15 ВоВаК
 
14.07.05
01:08
Я в COM не специалист, может можно как то узнать адрес процедуры метода? Я бы тогда сдампил код из памяти и просто вставил в свой экзешник в виде бинарника.
16 Zubr
 
14.07.05
10:53
(15) Любопытно... А ты слышал что-нибудь о заголовке екзешника, о таблице адресов и т.д. Это я к тому, что екзешник в памяти <> екзешнику в файле.
А вообще, слушай Федора...
17 ВоВаК
 
14.07.05
11:29
(16) О заголовке? Слышал. А при чём тут он? Непосредственные адреса можно патчить прямо в памяти. Таблица адресов? Ты имеешь ввиду VTBL или секции PE-файла? Второе в принципе отпадает, т.к. любой кто просто бы прогнал эту DLL-ку через WDASM, понял бы что секция экспорта у него отсутствует напрочь. Остаётся первое. Вот тут у меня опыта не хватает. Нужно из VTBL получить адрес метода и тогда можно будет попробовать сдампить код распаковки.
18 Vtlk
 
14.07.05
11:44
Вован! Снимаю шляпу! Мощщнейшая тема, я себя давно таким дураком не чувствовал :(
19 ВоВаК
 
14.07.05
11:53
(18) Я себя тоже дураком чевствовал когда мне на wasm.ru сдампили алгоритм LZNT1 (конкретно RtlDecompressBuffer) из NTDLL.DLL, а оказалось что он не подходит :) Теперь боюсь что второй раз не станут со мной возиться.
20 Zubr
 
14.07.05
11:57
А что мешает пользоваться готовыми инструментами для ковыряния МД.
Кроме упомянутого GComp я имею ввиду ActiveMD и Compound ?
21 ВоВаК
 
14.07.05
12:13
(20) Лично мне ничего не мешает.
22 MMF
 
14.07.05
12:29
(0) возьми www.mmf.newmail.ru\Zlib.zip
использование:
unction GetErtModuleText(const FileName : string): string;
var
  RootStg: IStorage;
  MetaStream: IStream;
  StringStream: TStringStream;
  OS: TOLEStream;
begin
  Result := '';
  OLECheck(StgOpenStorage(StringToOLEStr(FileName),
                       nil, STGM_READ or STGM_DIRECT
                       or STGM_SHARE_EXCLUSIVE,
                       nil, 0, RootStg));
  OLECheck(RootStg.OpenStream(StringToOLEStr('MD Programm text'),
    nil, STGM_DIRECT or STGM_READ or STGM_SHARE_EXCLUSIVE, 0, MetaStream));
  StringStream := TStringStream.Create('');
  try
    OS := TOleStream.Create(MetaStream);
    try
      try
        OS.Position := 0;
        ZDecompressStream(OS, StringStream);
      finally
        OS.Free;
      end;
      Result := StringStream.DataString;
    except
    end;
  finally
    StringStream.Free;
  end;
end;
23 ВоВаК
 
14.07.05
13:01
(22) Всё в исходниках, спасибо буду разбираться. А ZDecompressStream можно заменить на ZDecompress?
24 fez
 
14.07.05
13:27
(22) Можно этот пост в FAQ вставить?
25 MMF
 
14.07.05
14:07
(23) да
(24) да
26 fez
 
14.07.05
14:23
(25) Спасибо. обновил http://1c.alterplast.ru/1cv7md/zlibeng.html
27 ВоВаК
 
14.07.05
14:41
Теперь у меня 2 варианта: или разгребать Сишный и Паскалевский код, либо уважаемый MMF слинкует мне DLL-ку с реализацией ZDecompress (можно и compress заодно).
28 ВоВаК
 
14.07.05
14:49
(26) А там нет библиотеки. Там только сырцы и OBJ-ы.
29 fez
 
14.07.05
15:29
(28) Исправил.
30 ВоВаК
 
14.07.05
18:17
Уважаемые, у меня Паскаля вообще нет. Компильните у кого есть мне в DLL-ку пример от MMF.
31 ВоВаК
 
16.07.05
00:23
Вроде разобрался. Кстати тот Дельфийский пример что MMF кинул можно не только статически, но и динамически линковать. Даже менять ничего не нужно. Этот пример вместе с Дельфи идёт насколько я понял.