06.05.2011, 12:30 | #1 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
PKT v3.0 View
Проект на гитхабе:
https://github.com/Johnson7/pkt30view Скриншот: Возможности программы: - Открывает .pkt файл формата 3.0, описание формата тут - По умолчанию отображает пакеты в шестнадцатеричном представлении. - Можно задавать имена для пакетов и имя функции на языке lua для парсинга пакета - позволяет задавать имена опкодов и парсеры специфичные для конкретного билда wow. Для этого необходимо создать в папке где находится екзешник - папку с номером билда wow от которого сделан сниф Внутри папки создать 2 файла: opcodes.txt и parsers.lua формат файла opcodes.txt : Код:
опкод1, название_опкода1, имя_луа_функции1 опкод2, название_опкода2, имя_луа_функции2 Код:
function имя_луа_функции1() end function имя_луа_функции2() end В скрипте lua помимо стандартных доступны 2 библиотеки: packet и output для packet доступны следующие функции: Код:
length() - возвращает длину данных пакета decompress() - распаковать compressed пакет read8() - читает BYTE read16() - читает WORD read32() - читает DWORD readfloat() - читает float readguid() - читает GUID (8 байт) readpackedguid() - читает упакованый GUID readstring([len]) - читает строку длиной len, если вызывать без параметра, читает строку до завершающего 0 или конца пакета Код:
print(string) println(string) Приглашаются все желающие для совместной разработки В аттаче последня сборка Последний раз редактировалось Йоха; 21.05.2011 в 09:16. |
11.05.2011, 10:52 | #41 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
luabind на бусте сделан ? ну его в нафиг тогда
|
11.05.2011, 10:54 | #42 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Да на boost )) Но там используются только хедеры из него. Тоесть сам boost компилить ненужно для использования luabind
|
13.05.2011, 11:14 | #43 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
- Переписаны все вызовы луа без сторонних средств, удалены из проекта файлы luawraper.h luawraper.cpp за ненадобностью
- Добавлена команда "перегрузить опкоды и lua" - которая позволяет обновить оподы и луа функцию без перезагрузки программы и без повторного открытия файла. То есть можно что-то изменить в файлах opcodes.txt или parsers.lua и нажать кнопку "обновить", изменения сразу будут видны. - в библиотеку packet добавлен вызов функции readstring() функцию можно вызывать без параметров, тогда читается строка до первого нулевого символа или конца пакета. так же можно вызывать readstring(n), тогда функция вернет строку длиной n. Последний раз редактировалось Йоха; 13.05.2011 в 11:35. |
Пользователь сказал cпасибо: | Konctantin (13.05.2011) |
13.05.2011, 14:41 | #44 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
в библиотеку packet добавлены функции readguid, readpackedguid, readfloat, decompress
сейчас займусь выводом в окно hex view и нормальным окном для parsed packet. К модераторам: может закрепить топик ? ------------ Закрепил. YuruY Последний раз редактировалось YuruY; 13.05.2011 в 14:48. |
13.05.2011, 14:48 | #45 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
выплыл такой нюанс, в луа все числа представлены в формате double, который имеет 11 бит на порядок и 53 на мантиссу (всего 64 бита)
Мне кажется при чтении GUIDa будет потеря данных, в каком тогда виде лучше возвращать GUID ? |
13.05.2011, 14:59 | #46 |
Гость
Сообщений: n/a
|
а разве максимальный размер GUIDa не 8 байт (64 бита)? как раз влезает в размер
|
13.05.2011, 15:02 | #47 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
гуид то конечно 8 байт, просто по моему будет ересь если сделать так:
Код:
__int64 a = 10000000000; double d; memcpy(&d, &a, 8); Код:
__int64 a = 10000000000; double d = a; |
13.05.2011, 15:10 | #48 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
Код:
__int64 a = 10000000000; double d = *(double*)&a; Или так: Код:
union Foo { double d; __int64 a; }; Foo foo; foo.a = 10000000000; double d = foo.d; Последний раз редактировалось TOM_RUS; 13.05.2011 в 15:17. |
|
13.05.2011, 15:28 | #49 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
да по сути это одно и то же - побитовое копирование
просто если сделать такой тест: Код:
__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 | #50 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Теоретически придумал решение: возвращать гуид в виде таблицы, типа :
Код:
-- код на луа guid = packet.readguid() high = guid["high"] -- старшая часть гуида lo = guid["lo"] -- младшая часть гуида Последний раз редактировалось Йоха; 13.05.2011 в 15:50. |
13.05.2011, 15:44 | #51 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
либо возвращать record (struct по вашему) из двух интов, либо просто массив из 8 байт.
если остановишься на структуре, то используй названия полей какие нибудь по сложнее. у меня например в дельфи Lo - это функция, возвращаются младший байт word. например чонить типа guid_lo и guid_hi. только гуиды бывают разные. есть еще packed guid, не забывай. Последний раз редактировалось RomanRom2; 13.05.2011 в 15:47. |
13.05.2011, 15:48 | #52 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
какая разница, возвращается то уже нормальный 8-байтовый гуид |
|
13.05.2011, 15:48 | #53 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Близы в виде 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 } Последний раз редактировалось TOM_RUS; 13.05.2011 в 15:55. |
13.05.2011, 15:52 | #54 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Да я уже смотрел userdata, в скрипт луа из основной программы он передается как void*, то есть указатель на любую хрень
Но в луа с userdata ничего нельзя сделать :-( вариант со строкой тоже ничего, но мне кажется это будет неудобно обрабатывать гуид в таком виде хотя ... с гуидом что нужно делать ? сравнить с другим ? вариант со строкой тут отлично прокатывает. что еще ? Последний раз редактировалось Йоха; 13.05.2011 в 15:56. |
13.05.2011, 16:07 | #55 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
во вьювере что вообще нужно делать?
распечатывать. дампить в текстовый файл. сравнивать что то - я не знаю зачем. вы б на самом деле хоть описали бы задачу, которую будет решать вьювер. high level design. а то придумываете (и проблемы в том числе ) на ходу. ну тоже пойдет, какая разница. откуда возвращается? луа код типа будет распаковывать pguid в 8ми байтный и передавать его в основную программу? тогда ок. Последний раз редактировалось RomanRom2; 13.05.2011 в 16:09. |
13.05.2011, 16:42 | #56 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
Рома почитай описание программы, вроде я расписал все. Основная прога показывает просто список пакетов в виде таблицы, а парсинг пакетов осуществляет внешний луа скрипт, и весь этот огород городится для того что бы из луа можно было вызывать функции для чтения данных пакета Последний раз редактировалось Йоха; 13.05.2011 в 16:47. |
|
13.05.2011, 17:39 | #57 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
аа, ну ок ты обновил первый пост, я просто помню что в самом начале этой инфы не было и я не запомнил соответственно что было описание там и пр. гуд гуд
|
14.05.2011, 08:44 | #58 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Исправлены функции readguid() и readpackedguid(), теперь они возвращают гуид в виде hex строки.
Последний раз редактировалось Йоха; 15.05.2011 в 19:21. |
15.05.2011, 17:40 | #59 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Добавлено нормальное окно для hex дампа и для вывода данных из lua скрипта. Надо немного допилить вывод шестнадцатеричных данных и реализовать поддержку скролинга.
Обновил собраный exe в шапке, исходнике на гитхабе еще нет, это на работу завтра прийду и обновлю. Скажите кто-нибудь вообще пробовал использовать эту программу ? хотя бы для каких-нибудь не сложных опкодов написали парсер на lua ? А то топик выглядит как мой личный блог. Есть смысл продолжать ? или это все неудобно и никому не нужно ? Мне самому эта програмка нафиг не нужна Последний раз редактировалось NeatElves; 15.05.2011 в 18:09. |
Пользователь сказал cпасибо: | ANTOMA (30.05.2011) |
15.05.2011, 18:07 | #60 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
|
|
15.05.2011, 18:32 | #61 | |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Цитата:
|
|
15.05.2011, 18:53 | #62 | |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
не парься, не обращай внимания, делай. мне нужна |
|
15.05.2011, 18:56 | #63 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
И мне) Если будет что-то интересное - реализую такое у себя.
|
15.05.2011, 19:19 | #64 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
нет, я не против что бы все ждали готового, я собственно на это и расчитывал когда начал писать. Пусть другие пользуются, я буду доделывать нужный функционал. Просто не хочется тратить время на программу которой никто не будет пользоваться
|
15.05.2011, 19:23 | #65 |
Гость
Сообщений: n/a
|
если в ней будет интересный функционал, она многих заинтересует
|
15.05.2011, 19:26 | #66 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
|
15.05.2011, 19:32 | #67 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
|
15.05.2011, 19:33 | #68 |
Гость
Сообщений: n/a
|
|
15.05.2011, 19:42 | #69 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Konctantin, мне кажется, что не хватает WTL.
http://wtl.sourceforge.net/ |
Пользователь сказал cпасибо: | Konctantin (15.05.2011) |
15.05.2011, 19:43 | #70 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
Ну или воротить комплекс для этого дела... |
|
15.05.2011, 19:46 | #71 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
1. форматов более ранних версий поддерживать не нужно. 1.0, 2.0, 2.1 и 2.2 считайте что более не существуют, всеобщий переход на 3.0. у себя я тоже все конвертнул. все утилиты переводятся на работу с 3.0.
2. описание для снифов - полезно. его можно сохранять в optData 3. переименование не нужно. это же не редактор. какой смысл редактировать сниф? его нельзя редактировать. вот поиск по критериям - весьма полезная функциональность. 4. еще полезно сохранение выделенных пакетов в один снифф. 5. в моем вьювере есть похожая функциональность: фильтр - оставляется видимыми только отфильтрованные пакеты. на самом деле просто перечитывается снифф с условиями. тоже надо. пока всё. |
15.05.2011, 19:52 | #73 | |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
если наступит момент, когда понадобится действительно что то изменять в снифах, допишем эту функциональность и переименуем в какой нибудь... ну не знаю... PKT Studio... не нужно плодить лишних утилит. |
|
15.05.2011, 20:01 | #75 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
Код:
<?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> Последний раз редактировалось Konctantin; 15.05.2011 в 20:04. |
|
15.05.2011, 21:07 | #76 |
Гость
Сообщений: n/a
|
советую добавить все дело на панель со вкладками, для возможности переключения между снифами
|
15.05.2011, 22:21 | #77 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
А если ссылки то www.lua.org, www.zlib.org, wtl |
|
Пользователь сказал cпасибо: | Konctantin (16.05.2011) |
16.05.2011, 11:18 | #78 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Нашел наконец-то WTL app wizard для VisualStudio 2010, а так же оказалось что существует версия wtl 8.1. В связи с этим делается некоторая переработка проекта, как закончу выложу.
|
16.05.2011, 14:08 | #79 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
в продолжение списка функциональностей (feature spec):
6. поскольку снифы могут быть от разных билдов, соответственно парсеры опкодов (например респонсов) так же могут быть разные. нужно что бы загружались соответствующие выбранному билду парсеры. как одно из решений: в корне программы находятся каталоги по номеру билда (10314, 12340, ...), в которых лежат соответствующие lua-парсеры. при загрузке снифа мы знаем какой билд и грузим нужные парсеры из соответствующего каталога. ЗЫ. йоха, добавь в проект на гит все необходимые библиотеки в какой нибудь глобальный libs и настрой проект что бы он юзал эти библиотеки. проект должен собираться без каких либо танцов с бубнами. |
16.05.2011, 14:15 | #80 | |
Гость
Сообщений: n/a
|
Цитата:
|
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DBC Viewer | TOM_RUS | Tools | 10 | 05.08.2011 11:11 |
C#, DBC Viewer и компания | LordJZ | Флудильня | 13 | 02.11.2010 11:44 |