Сейчас на форуме: localhost1, vsv1, asfa, tyns777 (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Borland VCL Form
Посл.ответ Сообщение

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 28 июня 2020 14:40
· Личное сообщение · #1

Привет ребята.
Подскажите пожалуйста в каком формате хранятся эти данные в PE файле.
В RC DATA накиданы ресурсы начинающиеся с TPF0,
не могу найти их структуру что бы прочитать.



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 28 июня 2020 15:13
· Личное сообщение · #2

binary dfm



Ранг: 17.6 (новичок)
Активность: 0.01=0.01
Статус: Участник

Создано: 28 июня 2020 15:17
· Личное сообщение · #3

1. использовать <View as Text> IDE
2. Для самостоятельной обработки используют
Смотри модуль Classes
procedure ObjectBinaryToText(Input, Output: TStream;
var OriginalFormat: TStreamOriginalFormat);
procedure ObjectTextToBinary(Input, Output: TStream);



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 28 июня 2020 16:22
· Личное сообщение · #4

vitokopЯ не могу воспользоваться этим, я пишу не на Delphi.
Все что мне нужно вывести информацию в текстовом виде.
Для этого надо знать структуру в которой содержаться данные в ресурсе PE.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 28 июня 2020 16:56
· Личное сообщение · #5

утилита IDR
https://github.com/crypto2011/IDR



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 28 июня 2020 17:16
· Личное сообщение · #6

sendersu
так она в конечном итоге на ту же ObjectBinaryToText выходит
>>Resources.cpp

void __fastcall TResourceInfo::GetFormAsText(TDfm* Dfm, TStrings* DstList)
{
TMemoryStream *memStream = new TMemoryStream;
memStream->Size = Dfm->MemStream->Size;
Dfm->MemStream->Seek(0, soFromBeginning);
ObjectBinaryToText(Dfm->MemStream, memStream);
memStream->Seek(0, soFromBeginning);
DstList->LoadFromStream(memStream);
delete memStream;
}


Может быть есть смысл порыться с сырках lazarus?
Вобщем-то формат незамысловатый: сигнатура + array(длина имени свойства, имя свойства, флаги свойства, значение свойства),
вся соль в интерпретации флагов. Найти enumeration для них только.



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 28 июня 2020 17:23
· Личное сообщение · #7

RamMerlabsВот я покопался в HEX там идет ANSI строка, длина строки, и тд, между ними данные. Стоит некий флаг потом собственно число.
Где же документация то как интерпретировать эти флаги. Без этого не понять как перейти на следующую строку.



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 28 июня 2020 17:26
· Личное сообщение · #8

>>Где же документация то как интерпретировать эти флаги
дык я ж об этом и говорю.
кстати, там не ansi, а utf8



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 28 июня 2020 17:46
· Личное сообщение · #9

zombi-vadim
Вот тебе старого говнокода чуток. Интерпретируй

fbab_28.06.2020_EXELAB.rU.tgz - dec_forms.zip

| Сообщение посчитали полезным: RamMerlabs

Ранг: 43.1 (посетитель), 20thx
Активность: 0.160.29
Статус: Участник

Создано: 28 июня 2020 18:27
· Личное сообщение · #10

zombi-vadim пишет:
я пишу не на Delphi

Я что мешает скачать делфи, взять из исходников юнит Classes.pas (или System.Classes.pas) и разобрать указанную vitokop функцию?
Никакой документации для этого не нужно, и структуру можно понять без тыканины в HEX и бинарниках.



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 28 июня 2020 18:53
· Личное сообщение · #11

rmnЕсли вы разбираетесь в данном то подскажите пожалуйста вот к примеру
идет байт 04 за ним строка Left тут все понятно Далее идет байт 03 - непонятно что это
Далее 6901 это собственно значение (361)Далее опять длина строки.
Что означает 03?



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 28 июня 2020 18:59 · Поправил: RamMerlabs
· Личное сообщение · #12

zombi-vadim
Блин, в его же исходниках всё есть:
>>#define vaInt16 3
Это и есть интерпретация флагов. Соответственно, нужно считать следующие 2 байта как значение свойства.

| Сообщение посчитали полезным: zombi-vadim


Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 28 июня 2020 19:01
· Личное сообщение · #13

давно все изобретено до нас DFMEditor, DFMExplorer, DFMConvertor

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: mak

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 28 июня 2020 19:10
· Личное сообщение · #14

RamMerlabsСпасибо вам большое, кажется начинает доходить..



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 29 июня 2020 20:47 · Поправил: zombi-vadim
· Личное сообщение · #15

RamMerlabs
Благодаря вам все получилось, осталось только несколько непоняток.
Подскажите пожалуйста если вы в курсе, почему если строка закодирована
в UTF 8 или Unicode, то за каким то лядом впереди нее пишется несколько нулей,
причем эти нули в длине строки не учитываются, что это такое, если какое то выравнивание,
то почему с переди строки, не могу понять что это..



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 30 июня 2020 01:24
· Личное сообщение · #16

zombi-vadim
Для бинарных данных размер - это dword. В сорцах же все есть, начинай с функции LoadFromBinaryDFM и смотри, как она парсит данные разных типов.

| Сообщение посчитали полезным: zombi-vadim

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 30 июня 2020 20:01
· Личное сообщение · #17

rmn
Спасибо вам за подсказки и терпение
Разбирать чужой код для меня всегда та еще задачка.


 eXeL@B —› Вопросы новичков —› Borland VCL Form
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати