Считывание и поиск структур в процессе

Тема в разделе "WASM.PROJECTS", создана пользователем Rel, 4 апр 2010.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    Родилась такая идейка из темы:
    http://www.wasm.ru/forum/viewtopic.php?id=36924

    Думаю сделать программу, в которой можно будет задать формат структуры в виде:
    <имя поля> - <тип поля> - <комментарий>
    Затем, подключившись к процессу, задать диапазон памяти, в котором может лежать данная структура. По нажатию кнопки программа бы считывала диапазон памяти в буфер и затем по заданному смещению в считанном буфере производила подстановку значений в поля структуры. То есть пользователь мог бы глазами пройти весь диапазон и определить, в каком месте находится структура, посмотреть значения ее полей и тд. Вывод в виде таблицы:
    <имя поля> - <значение>
    Так же можно добавить и автоматический поиск по типам полей структуры. Ну и канеш обязательно надо добавить возможность сохранения/загрузки набитой структуры в файл, чтобы в дальнейшем можно было бы составить своего рода информационную базу плохо и не очень плохо документированных структур виндовс.

    Как вам идея? Будет ли данная штуковина полезна, или лучше забить на подобную херню? Есть какие-нить дополнения к выше изложенному функционалу? Кто хочет поучаствовать в этом (проект, если и будет, то будет оупенсорцовый)?
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    Пока все, что сделал это:
    1) Захардкодил типы полей структуры
    Код (Text):
    1. #ifndef _DATATYPES_H_INCLUDED_
    2. #define _DATATYPES_H_INCLUDED_
    3.  
    4. #include <windows.h>
    5.  
    6. // Простые типы данных
    7. #define DATATYPE_POINT 0x00 // Указатель
    8. #define DATATYPE_BYTE  0x01 // Байт
    9. #define DATATYPE_WORD  0x02 // Слово
    10. #define DATATYPE_DWORD 0x03 // Двойное слово
    11. #define DATATYPE_QWORD 0x04 // Четверное слово
    12. #define DATATYPE_FLOAT 0x05 // Число с плавающей точкой
    13. #define DATATYPE_ACHAR 0x06 // ANSI-символ
    14. #define DATATYPE_WCHAR 0x07 // UNICODE-символ
    15.  
    16. // Массивы
    17. #define DATATYPE_POINT_ARRAY 0x10 // Массив указателей
    18. #define DATATYPE_BYTE_ARRAY  0x11 // Массив байт
    19. #define DATATYPE_WORD_ARRAY  0x12 // Массив слов
    20. #define DATATYPE_DWORD_ARRAY 0x13 // Массив двойных слов
    21. #define DATATYPE_QWORD_ARRAY 0x14 // Массив четверных слов
    22. #define DATATYPE_FLOAT_ARRAY 0x15 // Массив чисел с плавающей точкой
    23. #define DATATYPE_ACHAR_ARRAY 0x16 // Массив ANSI-символов
    24. #define DATATYPE_WCHAR_ARRAY 0x17 // Массив UNICODE-символов
    25.  
    26. // Строки
    27. #define DATATYPE_ACHAR_STR 0x20 // Строка ANSI-символов (символ окончания строки - 0x00)
    28. #define DATATYPE_WCHAR_STR 0x21 // Строка UNICODE-символов (символ окончания строки - 0x0000)
    29.  
    30. // Указатели
    31. #define DATATYPE_POINT_PTR 0x30 // Указатель на указатель
    32. #define DATATYPE_BYTE_PTR  0x31 // Указатель на байт
    33. #define DATATYPE_WORD_PTR  0x32 // Указатель на слово
    34. #define DATATYPE_DWORD_PTR 0x33 // Указатель на двойное слово
    35. #define DATATYPE_QWORD_PTR 0x34 // Указатель на четверное слово
    36. #define DATATYPE_FLOAT_PTR 0x35 // Указатель на число с плавающей точкой
    37. #define DATATYPE_ACHAR_PTR 0x36 // Указатель на ANSI-символ
    38. #define DATATYPE_WCHAR_PTR 0x37 // Указатель на UNICODE-символ
    39.  
    40. DWORD DataType_GetSize(BYTE DataType, DWORD N);
    41.  
    42. #endif
    2) Сделал функцию соответствия размеров полей их хардкоженному типу:
    Код (Text):
    1. //-----------------------------------------------------------------//
    2. // Получить размер предопределенного типа данных (одного элемента) //
    3. // DataType - индекс типа данных                                   //
    4. //-----------------------------------------------------------------//
    5. DWORD DataType_GetSize(BYTE DataType)
    6. {
    7.     switch(DataType)
    8.     {
    9.         // Простые типы
    10.         case DATATYPE_POINT: return sizeof(PVOID);
    11.         case DATATYPE_BYTE:  return sizeof(BYTE);
    12.         case DATATYPE_WORD:  return sizeof(WORD);
    13.         case DATATYPE_DWORD: return sizeof(DWORD);
    14.         case DATATYPE_QWORD: return sizeof(LONGLONG);
    15.         case DATATYPE_FLOAT: return sizeof(FLOAT);
    16.         case DATATYPE_ACHAR: return sizeof(CHAR);
    17.         case DATATYPE_WCHAR: return sizeof(WCHAR);
    18.         // Массивы
    19.         case DATATYPE_POINT_ARRAY: return sizeof(PVOID);
    20.         case DATATYPE_BYTE_ARRAY:  return sizeof(BYTE);
    21.         case DATATYPE_WORD_ARRAY:  return sizeof(WORD);
    22.         case DATATYPE_DWORD_ARRAY: return sizeof(DWORD);
    23.         case DATATYPE_QWORD_ARRAY: return sizeof(LONGLONG);
    24.         case DATATYPE_FLOAT_ARRAY: return sizeof(FLOAT);
    25.         case DATATYPE_ACHAR_ARRAY: return sizeof(CHAR);
    26.         case DATATYPE_WCHAR_ARRAY: return sizeof(WCHAR);
    27.         // Строки
    28.         case DATATYPE_ACHAR_STR: return sizeof(CHAR);
    29.         case DATATYPE_WCHAR_STR: return sizeof(WCHAR);
    30.         // Указатели
    31.         case DATATYPE_POINT_PTR: return sizeof(PVOID);
    32.         case DATATYPE_BYTE_PTR:  return sizeof(PBYTE);
    33.         case DATATYPE_WORD_PTR:  return sizeof(PWORD);
    34.         case DATATYPE_DWORD_PTR: return sizeof(PDWORD);
    35.         case DATATYPE_QWORD_PTR: return sizeof(PLONGLONG);
    36.         case DATATYPE_FLOAT_PTR: return sizeof(PFLOAT);
    37.         case DATATYPE_ACHAR_PTR: return sizeof(PCHAR);
    38.         case DATATYPE_WCHAR_PTR: return sizeof(PWCHAR);
    39.         // Неверный код
    40.         default: return 0;
    41.     }
    42. }
     
  3. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Трудно себе представить как это и зачем искать структуры во всей памяти. В предидущем топике я имел ввиду раскрутку стека указателей на структуры, вложенные структуры и т.п. (т.е. которые в виде параметров, передаваемых в ф-ции), т.к. мне лично бы это пригодилось.
     
  4. svarogthepagan

    svarogthepagan New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2009
    Сообщения:
    3