Конвертер структур с Wndbg в формат Fasm.

Тема в разделе "WASM.PROJECTS", создана пользователем CrawlUp, 21 июн 2018.

  1. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    61
    Занялся изучением создания драйверов и столкнулся с неприятной вещью переписывание структур для Fasma. Windbg даёт возможность получить необходимые структуры, но структуры очень большие и переписывать их замахаешься. Но я же хочу стать программистом, а значит должен автоматизировать рутину по возможности. По началу думал, что тут нечего сложного и за недельку я справлюсь, о боже как я ошибся в своих возможностях. За то время пока я писал и переписывал эту программу я бы уже смог 20 раз переписать все имеющиеся структуры в Windows. Но упорство и труд всё перетрут.... хотя не уверен что эта программа пригодится хоть кому-нибудь.​

    Исходники без Sublime смысла смотреть нет, утоните в количестве строк. Программа написана плохо, мне просто еще не доводилось писать столь многострочные программы, разобраться в ней проблематично даже для меня. Внутри есть образец Template.txt в нем образец структуры с которым конвертер справляется. Проверяйте все строки после конвертера, ошибки конвертирования весьма вероятны. Может конвертировать только одну структуру за раз.
     

    Вложения:

    Treant нравится это.
  2. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    257
    Ты пошел по какому-то уж слишком замороченному пути. Обычно берут хидеры от студии и конвертят их, вон например https://github.com/SunsetQuest/CppHeaderToCSharpConverter C++ в С# на регулярках. Я думаю, можно даже присобачиться к студии через Ole (автокомплит там есть, значит скорей всего можно как-то через оле декларацию структур доставать) и брать интересующие структуры прямо оттуда. Ну и язык для реализации один из самых неподходящих выбрал, vbs бы это проделал проще и не в 2.6к строк.
     
  3. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    61
    Похоже я не очень внял вашим советам и переписал конвертер на С++ в рамках изучения этого языка.(строк получилось еще больше)
    Сейчас он гораздо лучше справляется с переводом структур(хоть и намного медленнее), но всё же далёк от идеального исполнения.
    В частности при переводе структуры :
    Код (Text):
    1. DISPATCHER_HEADER
    2.        +0x000 Lock             : Int4B
    3.        +0x000 LockNV           : Int4B
    4.        +0x000 Type             : UChar
    5.        +0x001 Signalling       : UChar
    6.        +0x002 Size             : UChar
    7.        +0x003 Reserved1        : UChar
    8.        +0x000 TimerType        : UChar
    переводит её с ошибкой:
    Код (Text):
    1.  struct DISPATCHER_HEADER
    2.             union
    3.                 struct
    4.                     union
    5.                      Lock                        dd   ?;       0x0
    6.                      LockNV                      dd   ?;       0x0
    7.                      Type                        db   ?;       0x0
    8.                     ends
    9.                  Signalling                      db   ?;       0x1
    10.                  Size                            db   ?;       0x2
    11.                  Reserved1                       db   ?;       0x3
    12.                 ends
    13. .....
    14.  
    а надо так:
    Код (Text):
    1. struct DISPATCHER_HEADER
    2.             union
    3.                 union
    4.                     union
    5.                      Lock                        dd   ?;       0x0
    6.                      LockNV                      dd   ?;       0x0
    7.                    ends
    8.                   struct                    
    9.                    Type                        db   ?;       0x0
    10.                    Signalling                      db   ?;       0x1
    11.                    Size                            db   ?;       0x2
    12.                    Reserved1                       db   ?;       0x3
    13.                 ends
    14.              ends
    15. ........
    16.  
    Вообще пользоваться надо с осторожностью, строку в которой значение байт неопределено подсвечивает, а которую не разобрал, просто стирает.
    Не знаю как правильно выкладывать исходный код, исходник занимает 600мб что он себе там накачал даже подумать не могу, надеюсь всё сделал правильно. Если вдруг захочется посмотреть структуру программы, то придеётся долго и упорно жать минусики что бы увидеть общую картину, функции в свёрнутом виде почему-то не хотят сохраняться.

    Внутри пример структур в файле windows.txt не переведенных и в windows.inc переведённых.
     

    Вложения: