Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Tools (http://mangos.ytdb.ru/forumdisplay.php?f=22)
-   -   PKT v3.0 Viewer (http://mangos.ytdb.ru/showthread.php?t=4298)

Йоха 11.05.2011 10:52

luabind на бусте сделан ? ну его в нафиг тогда

alien 11.05.2011 10:54

Да на boost )) Но там используются только хедеры из него. Тоесть сам boost компилить ненужно для использования luabind

Йоха 13.05.2011 11:14

- Переписаны все вызовы луа без сторонних средств, удалены из проекта файлы luawraper.h luawraper.cpp за ненадобностью

- Добавлена команда "перегрузить опкоды и lua" - которая позволяет обновить оподы и луа функцию без перезагрузки программы и без повторного открытия файла.
То есть можно что-то изменить в файлах opcodes.txt или parsers.lua и нажать кнопку "обновить", изменения сразу будут видны.

- в библиотеку packet добавлен вызов функции readstring()
функцию можно вызывать без параметров, тогда читается строка до первого нулевого символа или конца пакета. так же можно вызывать readstring(n), тогда функция вернет строку длиной n.

Йоха 13.05.2011 14:41

в библиотеку packet добавлены функции readguid, readpackedguid, readfloat, decompress

сейчас займусь выводом в окно hex view и нормальным окном для parsed packet.

К модераторам: может закрепить топик ?

------------
Закрепил. YuruY

Йоха 13.05.2011 14:48

выплыл такой нюанс, в луа все числа представлены в формате double, который имеет 11 бит на порядок и 53 на мантиссу (всего 64 бита)
Мне кажется при чтении GUIDa будет потеря данных, в каком тогда виде лучше возвращать GUID ?

13.05.2011 14:59

Цитата:

Сообщение от Йоха (Сообщение 22322)
выплыл такой нюанс, в луа все числа представлены в формате double, который имеет 11 бит на порядок и 53 на мантиссу (всего 64 бита)
Мне кажется при чтении GUIDa будет потеря данных, в каком тогда виде лучше возвращать GUID ?

а разве максимальный размер GUIDa не 8 байт (64 бита)? как раз влезает в размер

Йоха 13.05.2011 15:02

гуид то конечно 8 байт, просто по моему будет ересь если сделать так:
Код:

__int64 a = 10000000000;
double d;
memcpy(&d, &a, 8);

а если так :
Код:

__int64 a = 10000000000;
double d = a;

то потеря данных.

TOM_RUS 13.05.2011 15:10

Цитата:

Сообщение от Йоха (Сообщение 22324)
гуид то конечно 8 байт, просто по моему будет ересь если сделать так:
Код:

__int64 a = 10000000000;
double d;
memcpy(&d, &a, 8);

а если так :
Код:

__int64 a = 10000000000;
double d = a;

то потеря данных.

А если так:
Код:

__int64 a = 10000000000;
double d = *(double*)&a;

?

Или так:
Код:

union Foo
{
    double d;
  __int64 a;
};

Foo foo;
foo.a = 10000000000;
double d = foo.d;


Йоха 13.05.2011 15:28

да по сути это одно и то же - побитовое копирование

просто если сделать такой тест:
Код:

        __int64 a = 10000000000;
       
        double d = *(double*)&a;

        std::cout << a << std::endl;
        std::cout << d << std::endl;

то результат будет как раз такой которого я и боялся

Код:

10000000000
4.94066e-314

побитово они совпадают, но интерпретируются по разному

Йоха 13.05.2011 15:42

Теоретически придумал решение: возвращать гуид в виде таблицы, типа :
Код:

-- код на луа
guid = packet.readguid()
high = guid["high"] -- старшая часть гуида
lo = guid["lo"] -- младшая часть гуида

Осталось разобраться как это реализовать на практике. Или предложите более изящный вариант

RomanRom2 13.05.2011 15:44

либо возвращать record (struct по вашему) из двух интов, либо просто массив из 8 байт.
если остановишься на структуре, то используй названия полей какие нибудь по сложнее. у меня например в дельфи Lo - это функция, возвращаются младший байт word. например чонить типа guid_lo и guid_hi.

только гуиды бывают разные. есть еще packed guid, не забывай.

Йоха 13.05.2011 15:48

Цитата:

Сообщение от RomanRom2 (Сообщение 22329)
либо возвращать record (struct по вашему) из двух интов, либо просто массив из 8 байт.

в луа нет понятия struct, есть таблицы

Цитата:

Сообщение от RomanRom2 (Сообщение 22329)
только гуиды бывают разные. есть еще packed guid, не забывай.

какая разница, возвращается то уже нормальный 8-байтовый гуид

TOM_RUS 13.05.2011 15:48

Близы в виде HEX строки у себя в lua гуиды передают :)
В lua еще какое-то "userdata" есть, хз что это :)
Код:

    enum LuaType : int
    {
        None = -1,
        Nil = 0,
        Boolean = 1,
        LightUserdata = 2,
        Number = 3,
        String = 4,
        Table = 5,
        Function = 6,
        Userdata = 7,
        Thread = 8,
        Proto = 9,
        Upval = 10
    }


Йоха 13.05.2011 15:52

Да я уже смотрел userdata, в скрипт луа из основной программы он передается как void*, то есть указатель на любую хрень
Но в луа с userdata ничего нельзя сделать :-(

вариант со строкой тоже ничего, но мне кажется это будет неудобно обрабатывать гуид в таком виде

хотя ... с гуидом что нужно делать ? сравнить с другим ? вариант со строкой тут отлично прокатывает.
что еще ?

RomanRom2 13.05.2011 16:07

во вьювере что вообще нужно делать? =)
распечатывать. дампить в текстовый файл.
сравнивать что то - я не знаю зачем.

вы б на самом деле хоть описали бы задачу, которую будет решать вьювер. high level design. а то придумываете (и проблемы в том числе =)) на ходу.

Цитата:

Сообщение от Йоха (Сообщение 22330)
в луа нет понятия struct, есть таблицы

ну тоже пойдет, какая разница.

Цитата:

Сообщение от Йоха (Сообщение 22330)
какая разница, возвращается то уже нормальный 8-байтовый гуид

откуда возвращается? луа код типа будет распаковывать pguid в 8ми байтный и передавать его в основную программу? тогда ок.

Йоха 13.05.2011 16:42

Цитата:

Сообщение от RomanRom2 (Сообщение 22335)
откуда возвращается? луа код типа будет распаковывать pguid в 8ми байтный и передавать его в основную программу? тогда ок.

наоборот, луа скрипт вызывает packet.readpacketguid(), эта функция реализована на cpp, она распаковывает packed guid в обычный 8-байтовый гуид и возвращает его.

Цитата:

Сообщение от RomanRom2 (Сообщение 22335)
вы б на самом деле хоть описали бы задачу, которую будет решать вьювер. high level design. а то придумываете (и проблемы в том числе ) на ходу.

Рома почитай описание программы, вроде я расписал все. Основная прога показывает просто список пакетов в виде таблицы, а парсинг пакетов осуществляет внешний луа скрипт, и весь этот огород городится для того что бы из луа можно было вызывать функции для чтения данных пакета

RomanRom2 13.05.2011 17:39

аа, ну ок =) ты обновил первый пост, я просто помню что в самом начале этой инфы не было и я не запомнил соответственно что было описание там и пр. гуд гуд =)

Йоха 14.05.2011 08:44

Исправлены функции readguid() и readpackedguid(), теперь они возвращают гуид в виде hex строки.

Йоха 15.05.2011 17:40

Добавлено нормальное окно для hex дампа и для вывода данных из lua скрипта. Надо немного допилить вывод шестнадцатеричных данных и реализовать поддержку скролинга.
Обновил собраный exe в шапке, исходнике на гитхабе еще нет, это на работу завтра прийду и обновлю.

Скажите кто-нибудь вообще пробовал использовать эту программу ? хотя бы для каких-нибудь не сложных опкодов написали парсер на lua ? А то топик выглядит как мой личный блог.

Есть смысл продолжать ? или это все неудобно и никому не нужно ? Мне самому эта програмка нафиг не нужна

LordJZ 15.05.2011 18:07

Цитата:

Сообщение от Йоха (Сообщение 22438)
Скажите кто-нибудь вообще пробовал использовать эту программу ? хотя бы для каких-нибудь не сложных опкодов написали парсер на lua ? А то топик выглядит как мой личный блог.

Есть смысл продолжать ? или это все неудобно и никому не нужно ? Мне самому эта програмка нафиг не нужна

Я парсеры на lua не писал, но программку скачивал и запускал, даже исходники с гитхаба качал и приводил в общий вид солюшен (пути инклюдов, директорий, т.п.)

Lordronn 15.05.2011 18:32

Цитата:

Есть смысл продолжать ? или это все неудобно и никому не нужно ? Мне самому эта програмка нафиг не нужна
А как же самообучение и развитие? Я так тоже часто думаю, когда дописываю в свой вайвер что нибудь и думаю, а нафиг оно кому нибудь надо кроме меня

RomanRom2 15.05.2011 18:53

Цитата:

Сообщение от Йоха (Сообщение 22436)
Есть смысл продолжать ? или это все неудобно и никому не нужно ? Мне самому эта програмка нафиг не нужна

йоха, не парься, смысл есть. так всегда, когда появляется такой вроде тебя - способный что то делать собственно делающий, остальные (большинство) сидят и ждут, пока все за них сделают. это нормально. у меня в команде тоже так было =)

не парься, не обращай внимания, делай. мне нужна =)

Lordronn 15.05.2011 18:56

И мне) Если будет что-то интересное - реализую такое у себя.

Йоха 15.05.2011 19:19

нет, я не против что бы все ждали готового, я собственно на это и расчитывал когда начал писать. Пусть другие пользуются, я буду доделывать нужный функционал. Просто не хочется тратить время на программу которой никто не будет пользоваться

15.05.2011 19:23

Цитата:

Сообщение от Йоха (Сообщение 22448)
нет, я не против что бы все ждали готового, я собственно на это и расчитывал когда начал писать. Пусть другие пользуются, я буду доделывать нужный функционал. Просто не хочется тратить время на программу которой никто не будет пользоваться

если в ней будет интересный функционал, она многих заинтересует :thank_you:

Йоха 15.05.2011 19:26

Цитата:

Сообщение от Minimajack (Сообщение 22449)
если в ней будет интересный функционал, она многих заинтересует :thank_you:

какой ? опишите что было бы нужно ?

Konctantin 15.05.2011 19:32

Знатоков С++ прошу сильно не пинать, но у меня есть пару вопросов:
Скачал проект, запускаю, пытаюсь скомпилировать, в итоге получаю ошибки:


и вот таких кучу:


может чего-то не хватает? надо какие-то дополнительные компоненты?

15.05.2011 19:33

Цитата:

Сообщение от Йоха (Сообщение 22450)
какой ? опишите что было бы нужно ?

сохранение в pkt3, форматов более ранних версий
создание описания для снифов (территории, квесты, итемы )
пакетная обработка снифов ( переименование, описание, поиск и т.п.)
да и юзерфрендли интерфейс тоже бы не помешал =)))

zergtmn 15.05.2011 19:42

Konctantin, мне кажется, что не хватает WTL.
http://wtl.sourceforge.net/

Konctantin 15.05.2011 19:43

Цитата:

создание описания для снифов (территории, квесты, итемы )
пакетная обработка снифов ( переименование, описание, поиск и т.п.)
Этим уже должна заниматься другая программка, что-то на подобии PKT Browser.
Ну или воротить комплекс для этого дела...

RomanRom2 15.05.2011 19:46

1. форматов более ранних версий поддерживать не нужно. 1.0, 2.0, 2.1 и 2.2 считайте что более не существуют, всеобщий переход на 3.0. у себя я тоже все конвертнул. все утилиты переводятся на работу с 3.0.

2. описание для снифов - полезно. его можно сохранять в optData

3. переименование не нужно. это же не редактор. какой смысл редактировать сниф? его нельзя редактировать. вот поиск по критериям - весьма полезная функциональность.

4. еще полезно сохранение выделенных пакетов в один снифф.

5. в моем вьювере есть похожая функциональность: фильтр - оставляется видимыми только отфильтрованные пакеты. на самом деле просто перечитывается снифф с условиями. тоже надо.

пока всё.

Konctantin 15.05.2011 19:52

Я фильтр тоже делал (по опкоду и по содержимому пакета)

RomanRom2 15.05.2011 19:52

Цитата:

Сообщение от Konctantin (Сообщение 22454)
Этим уже должна заниматься другая программка, что-то на подобии PKT Browser.
Ну или воротить комплекс для этого дела...

нет нет, не надо схожих по функциональности программ. не нужно РЕДАКТИРОВАТЬ снифы. МОЖНО редактировать ОПИСАНИЯ.

если наступит момент, когда понадобится действительно что то изменять в снифах, допишем эту функциональность и переименуем в какой нибудь... ну не знаю... PKT Studio... не нужно плодить лишних утилит.

Konctantin 15.05.2011 19:54

с WTL разобрался, осталось найти инклюды для lua.
Йоха, не могли бы вы приложить ссылки на внешние компоненты...

Konctantin 15.05.2011 20:01

Цитата:

создание описания для снифов (территории, квесты, итемы )
я написал для этого тулзу, которая хранит описание сниффов в формате XML, как бы отдельной базе:
Код:

<?xml version="1.0"?>
<PacketList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Packet>
    <FileName>ruRU_13329_2011-01-10_12-57-49-6480.pkt</FileName>
    <Build>13329</Build>
    <Locales>ruRU</Locales>
    <Description>test</Description>
    <Maps>
      <unsignedInt>1</unsignedInt>
      <unsignedInt>0</unsignedInt>
    </Maps>
    <Quests>
      <unsignedInt>25584</unsignedInt>
    </Quests>
  </Packet>
</PacketList>

ЗЫ. Все застыло из-за того, что я не смог заставить WebBrouser работать с js в оффлайн режиме (в нем я хотел отображать описание сниффа, при этом получая данные с вовхеда)

15.05.2011 21:07

советую добавить все дело на панель со вкладками, для возможности переключения между снифами

Йоха 15.05.2011 22:21

Цитата:

Сообщение от Konctantin (Сообщение 22458)
с WTL разобрался, осталось найти инклюды для lua.
Йоха, не могли бы вы приложить ссылки на внешние компоненты...

нужны ссылки или недостающие файлы? в первом посте в аттаче есть и WTL и Lua (хидеры и либы) и zlib (хидер и либа)
А если ссылки то www.lua.org, www.zlib.org, wtl

Йоха 16.05.2011 11:18

Нашел наконец-то WTL app wizard для VisualStudio 2010, а так же оказалось что существует версия wtl 8.1. В связи с этим делается некоторая переработка проекта, как закончу выложу.

RomanRom2 16.05.2011 14:08

в продолжение списка функциональностей (feature spec):

6. поскольку снифы могут быть от разных билдов, соответственно парсеры опкодов (например респонсов) так же могут быть разные. нужно что бы загружались соответствующие выбранному билду парсеры.

как одно из решений:
в корне программы находятся каталоги по номеру билда (10314, 12340, ...), в которых лежат соответствующие lua-парсеры. при загрузке снифа мы знаем какой билд и грузим нужные парсеры из соответствующего каталога.

ЗЫ. йоха, добавь в проект на гит все необходимые библиотеки в какой нибудь глобальный libs и настрой проект что бы он юзал эти библиотеки. проект должен собираться без каких либо танцов с бубнами.

16.05.2011 14:15

Цитата:

Сообщение от Йоха (Сообщение 21866)
Проект на гитхабе:
https://github.com/Johnson7/pkt30view

Для этого необходимо создать в папке где находится екзешник - папку с номером билда wow от которого сделан сниф
Внутри папки создать 2 файла: opcodes.txt и parsers.lua

плохо видно
=)))


Текущее время: 04:13. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS