Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <vector>
- #include <iostream>
- struct BinaryReader
- {
- const std::vector<byte> &buf;
- size_t index;
- BinaryReader(const std::vector<byte> &dataSource) :buf(dataSource), index(0)
- {}
- template<typename T>
- T read()
- {
- const byte *p = buf.data();
- T result = *(T*)(p + index);
- index += sizeof(T);
- return result;
- }
- void readBytes(std::vector<byte> &out, size_t size)
- {
- out.assign(buf.begin() + index, buf.begin() + index + size);
- index += size;
- }
- bool dataAvailable()
- {
- return index < buf.size() - 1;
- }
- };
- struct PacketHeader
- {
- WORD unknown1;
- DWORD dataSize;
- void read(BinaryReader &headerData)
- {
- unknown1 = headerData.read<WORD>();
- dataSize = headerData.read<DWORD>();
- }
- void print() const
- {
- printf("header{%X dataSize=%d}\n", unknown1, dataSize);
- }
- };
- struct PacketData
- {
- std::vector<byte> packetBuf;
- void read(BinaryReader &packetData, PacketHeader &header)
- {
- packetData.readBytes(packetBuf, header.dataSize);
- }
- void print() const
- {
- printf("data=");
- for (const byte &b : packetBuf)
- printf("%02X ", b);
- putchar('\n');
- }
- };
- struct Packet
- {
- PacketHeader header;
- PacketData data;
- void read(BinaryReader &packetData)
- {
- header.read(packetData);
- data.read(packetData, header);
- }
- void print() const
- {
- header.print();
- data.print();
- }
- };
- struct PacketParser
- {
- std::vector<Packet> packets;
- void read(BinaryReader &packetsData)
- {
- Packet packet;
- do
- {
- packet.read(packetsData);
- packets.push_back(packet);
- } while (packetsData.dataAvailable());
- }
- };
- int main()
- {
- std::vector<byte> data = { 0xA4, 0xF6, 0x20, 0x00, 0x00, 0x00, 0x11, 0x3B, 0xE2, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x78, 0x58, 0xAF, 0x11, 0x58, 0xA0, 0xB1, 0x66, 0x58, 0xAF, 0x58, 0x31, 0x58, 0xD2, 0x0B, 0xB4, 0x58, 0x58, 0xCC, 0x75, 0xF8, 0x08, 0xBC };
- PacketParser parser;
- BinaryReader packetReader(data);
- parser.read(packetReader);
- for (const Packet &packet : parser.packets)
- packet.print();
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement