Русский / Russian English / Английский

Сейчас на форуме: Rio (+5 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

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

Ранг: 16.5 (новичок)
Статус: Участник

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

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



Ранг: 158.6 (ветеран)
Статус: Участник

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

binary dfm



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

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

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



Ранг: 16.5 (новичок)
Статус: Участник

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

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



Ранг: 512.7 (!)
Статус: Модератор

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

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



Ранг: 73.1 (постоянный)
Статус: Участник

Создано: 28 июня 2020 17:16 New!
Цитата · Личное сообщение · #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.5 (новичок)
Статус: Участник

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

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



Ранг: 73.1 (постоянный)
Статус: Участник

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

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



Ранг: 158.6 (ветеран)
Статус: Участник

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

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

{ Атач доступен только для участников форума } - dec_forms.zip

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


Ранг: 43.1 (посетитель)
Статус: Участник

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

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

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



Ранг: 16.5 (новичок)
Статус: Участник

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

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



Ранг: 73.1 (постоянный)
Статус: Участник

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

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

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



Ранг: 528.7 (!)
Статус: Участник
Победитель турнира 2010

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

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

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


Ранг: 16.5 (новичок)
Статус: Участник

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

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



Ранг: 16.5 (новичок)
Статус: Участник

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

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



Ранг: 158.6 (ветеран)
Статус: Участник

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

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

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


Ранг: 16.5 (новичок)
Статус: Участник

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

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



Ранг: 16.5 (новичок)
Статус: Участник

Создано: 09 июля 2020 22:38 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #18

Пожалуй это одна из самых сложных структур, которые я вручную пропарсил.
rmn
У меня осталась пара вопросов, которые я не понял.
vaExtended оказалась 10 байтовым long double, которое моим компилятором MSVC, вообще не поддерживается !!
Если вы форматировали это значение в строку на MSVC, то интересно знать как.
Я просмотрел наверно с сотню PE файлов написанных на Delphi, но ни в одном мне не попались
значения с флагами
vaIdent
vaSingle
vaCurrency
vaDate
vaInt64
Если с Int64, все ясно, то остальные бы хотелось поточнее понять
float CDFMSingle просто 4х байтовое float?
double CDFMCurrency просто 8х байтовое double?
double CDFMDate чем отличие от CDFMCurrency?
vaIdent ??



Ранг: 158.6 (ветеран)
Статус: Участник

Создано: 10 июля 2020 00:01 New!
Цитата · Личное сообщение · #19

float CDFMSingle просто 4х байтовое float?
да

double CDFMCurrency просто 8х байтовое double?
да

double CDFMDate чем отличие от CDFMCurrency?
Это особый дельфовый формат даты/времени. По сути, это обычный double. Целая часть числа это число дней от чего-то-там, а дробная - число секунд от начала дня.

vaIdent ??
Идентификатор. По сути, просто строка (LString), соответствующая какому-нибудь имени в rtti.

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

 eXeL@B —› Вопросы новичков —› Borland VCL Form

Видеокурс ВЗЛОМ