What's new
Tiêu Dật Tài / Forum

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

AXP_STRUC

tieudattai

Administrator
Staff member
JSON:
{
  "description": "Mô tả cấu trúc file archive AXP (phân tích ngược).",
  "byte_order": "little-endian",
  "components": [
    {
      "name": "Header",
      "offset": 0,
      "size_bytes": 40,
      "format_description": "10 x Unsigned Integer (4 byte mỗi giá trị)",
      "fields": [
        {
          "name": "identity",
          "type": "uint32",
          "description": "Số nhận dạng (Magic number), nên là 0x4B505841 ('AXPK')"
        },
        {
          "name": "version",
          "type": "uint32",
          "description": "Phiên bản định dạng file (ví dụ: 65537)"
        },
        {
          "name": "unknown_1",
          "type": "uint32",
          "description": "Chưa rõ mục đích (không được sử dụng bởi logic giải nén hiện tại)"
        },
        {
          "name": "unknown_2",
          "type": "uint32",
          "description": "Chưa rõ mục đích (không được sử dụng bởi logic giải nén hiện tại)"
        },
        {
          "name": "block_table_offset",
          "type": "uint32",
          "description": "Vị trí bắt đầu (offset) của Block Table, tính từ đầu file (đơn vị byte)."
        },
        {
          "name": "block_table_count",
          "type": "uint32",
          "description": "Số lượng entry trong Block Table (cũng là tổng số block dữ liệu/file)."
        },
        {
          "name": "unknown_3",
          "type": "uint32",
          "description": "Chưa rõ mục đích (không được sử dụng bởi logic giải nén hiện tại)"
        },
        {
          "name": "unknown_4",
          "type": "uint32",
          "description": "Chưa rõ mục đích (không được sử dụng bởi logic giải nén hiện tại)"
        },
        {
          "name": "unknown_5",
          "type": "uint32",
          "description": "Chưa rõ mục đích (không được sử dụng bởi logic giải nén hiện tại)"
        },
        {
          "name": "unknown_6",
          "type": "uint32",
          "description": "Chưa rõ mục đích (không được sử dụng bởi logic giải nén hiện tại)"
        }
      ]
    },
    {
      "name": "Block Table",
      "offset": "Giá trị từ Header.block_table_offset",
      "size_bytes": "Header.block_table_count * 12",
      "description": "Một mảng các entry, mỗi entry mô tả một block dữ liệu.",
      "entry_structure": {
        "size_bytes": 12,
        "format_description": "3 x Unsigned Integer (4 byte mỗi giá trị)",
        "fields": [
          {
            "name": "data_offset",
            "type": "uint32",
            "description": "Vị trí bắt đầu (offset) của Data Block tương ứng, tính từ đầu file (đơn vị byte)."
          },
          {
            "name": "block_size",
            "type": "uint32",
            "description": "Kích thước của Data Block tương ứng (đơn vị byte)."
          },
          {
            "name": "flags",
            "type": "uint32",
            "description": "Chưa rõ mục đích (thường là 0 hoặc 1, không được sử dụng bởi logic giải nén hiện tại)."
          }
        ]
      },
      "count": "Giá trị từ Header.block_table_count"
    },
    {
      "name": "Data Blocks",
      "offset": "Thay đổi, xác định bởi các entry trong Block Table",
      "size_bytes": "Thay đổi, xác định bởi các entry trong Block Table",
      "description": "Chứa dữ liệu thực tế của các file. Vị trí và kích thước của mỗi block `i` được xác định bởi `Block Table[i].data_offset` và `Block Table[i].block_size`.",
      "special_handling": {
        "last_block_as_manifest": true,
        "description": "Block dữ liệu cuối cùng (chỉ số: Header.block_table_count - 1) thường chứa một file manifest dạng text.",
        "manifest_format": {
          "encoding": ["UTF-8", "GBK (dự phòng)"],
          "line_format": "filepath|size_hex|checksum_hex",
          "separator": "|",
          "notes": [
            "Mỗi dòng tương ứng với một block trong Block Table, theo đúng thứ tự.",
            "Các dòng không hợp lệ (sai định dạng) sẽ được ghi cảnh báo và bỏ qua.",
            "Tổng số dòng *hợp lệ* phải bằng Header.block_table_count.",
            "Trường 'filepath' chứa đường dẫn tương đối và tên file gốc.",
            "Trường 'size_hex' (dạng chuỗi) là biểu diễn hexa của kích thước file gốc (có thể dùng để kiểm tra với giá trị trong Block Table).",
            "Trường 'checksum_hex' (dạng chuỗi) có thể là CRC32 hoặc một loại checksum tương tự ở dạng hexa (có thể dùng để kiểm tra tính toàn vẹn)."
          ]
        }
      }
    }
  ]
}
 
edd93e29-ca56-4b21-8ffb-7275beb76f88.png
 
Back
Top