Сейчас на форуме: asfa, _MBK_ (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Шаблон в 010 Editor
Посл.ответ Сообщение


Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 23 июля 2009 11:21
· Личное сообщение · #1

Вроде уже всю документацию прошерстил, но никак не могу составить шаблон

Есть файл в котором структуры, выглядят примерно вот так:
struct Header
{
int NumberOfTables;
} header;

struct Table
{
long OffSet;
} table[header.NumberOfTables];

в цикле я могу прочитать Offset, но как мне указать на то, что по такому смещению лежит таблица такая-то?

-----
Researcher





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 23 июля 2009 12:33 · Поправил: Jupiter
· Личное сообщение · #2

указываешь функцию, которая читает структуру

} SOME_STRUCT<read=ReadSOME_STRUCT>;

пример:

Code:
  1. // Main code start
  2. IMAGE_DOS_HEADER dos_header;
  3. FSeek(dos_header.HeaderSizeInParagraphs * 16);
  4. local int dosstubsize = dos_header.FileSizeInPages * 512;
  5. if(dos_header.UsedBytesInTheLastPage)
  6.    dosstubsize -= (512 - dos_header.UsedBytesInTheLastPage);
  7. if(dosstubsize > dos_header.AddressOfNewExeHeader)
  8.    dosstubsize = dos_header.AddressOfNewExeHeader;
  9. dosstubsize -= dos_header.HeaderSizeInParagraphs * 16;
  10. local quad richpos; // Microsoft linker signature ("Rich")
  11. local quad richstart, richsize=0;
  12. if((richpos = FindFirst("Rich",true,false,false,0.0,1,FTell(),dosstubsize)) > 0 &&
  13.    (ReadUInt(richpos - 4) & 0xFFFFFF00) == (ReadUInt(richpos + 4) & 0xFFFFFF00)) {
  14.    local int a = 0;
  15.    local quad save = FTell();
  16.    FSeek(richpos); // Find the first zero DWORD preceeding richpos
  17.    richstart = FindFirst(a, true, false,false,0.0,0,FTell(),richpos-FTell());
  18.    FSeek(save);
  19.    richpos += 8; // advance richpos to the end of the "Rich" signature
  20.    richstart += 4; // advance richstart to the non-null byte
  21.    richsize = richpos - richstart;
  22.    dosstubsize = richstart - FTell();
  23. }
  24. if(dosstubsize > 0)
  25.    UCHAR doscode[dosstubsize];
  26. if(richsize > 0) {
  27.    FSeek(richstart);
  28.    DWORD MSlinkerSignatureRich[richsize/4]<format=hex>;
  29. }



также ты можешь использовать FSeek

30b7_23.07.2009_CRACKLAB.rU.tgz - PETemplate.bt

-----
EnJoy!





Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 23 июля 2009 15:14
· Личное сообщение · #3

Домо аригато, Jupiter!

-----
Researcher



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


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