mirror of
https://github.com/nmap/nmap.git
synced 2025-12-27 01:49:03 +00:00
75 lines
2.9 KiB
Plaintext
75 lines
2.9 KiB
Plaintext
|
|
--- Pack and unpack binary data.
|
|
-- \n\n
|
|
-- A problem script authors often face is the necessity of encoding values
|
|
-- into binary data. For example after analyzing a protocol the starting
|
|
-- point to write a script could be a hex dump, which serves as a preamble
|
|
-- to every sent packet. Although it is possible work with the
|
|
-- functionality Lua provides, it's not very convenient. Therefore NSE includes
|
|
-- Binlib, based on lpack (http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/)
|
|
-- by Luiz Henrique de Figueiredo.
|
|
-- \n\n
|
|
-- The Binlib functions take a format string to encode and decode binary
|
|
-- data. Packing and unpacking are controlled by the following operator
|
|
-- characters:\n
|
|
-- * H: hex string
|
|
-- * B: bit string
|
|
-- * x: null byte
|
|
-- * z: zero-terminated string
|
|
-- * p: string preceded by 1-byte integer length
|
|
-- * P: string preceded by 2-byte integer length
|
|
-- * a: string preceded by 4-byte integer length
|
|
-- * A: string
|
|
-- * f: float
|
|
-- * d: double
|
|
-- * n: Lua number
|
|
-- * c: char (1-byte integer)
|
|
-- * C: byte = unsigned char (1-byte unsigned integer)
|
|
-- * s: short (2-byte integer)
|
|
-- * S: unsigned short (2-byte unsigned integer)
|
|
-- * i: int (4-byte integer)
|
|
-- * I: unsigned int (4-byte unsigned integer)
|
|
-- * l: long (8-byte integer)
|
|
-- * L: unsigned long (8-byte unsigned integer)
|
|
-- * <: little endian modifier
|
|
-- * >: big endian modifier
|
|
-- * =: native endian modifier
|
|
-- \n\n
|
|
-- Note that the endian operators work as modifiers to all the
|
|
-- characters following them in the format string.
|
|
|
|
module "bin"
|
|
|
|
|
|
--- Returns a binary packed string.
|
|
-- \n\n
|
|
-- The format string describes how the parameters (p1, ...) will be interpreted.
|
|
-- Numerical values following operators stand for operator repetitions and need
|
|
-- an according amount of parameters. Operators expect appropriate parameter
|
|
-- types.
|
|
-- \n\n
|
|
-- Note: on Windows packing of 64 bit values > 2^63 currently
|
|
-- results in packing exactly 2^63.
|
|
--@param format Format string, used to pack following arguments.
|
|
--@param ... The values to pack.
|
|
--@return String containing packed data.
|
|
function bin.pack(format, ...)
|
|
|
|
|
|
--- Returns values read from the binary packed data string.
|
|
-- \n\n
|
|
-- The first return value of this function is the position at which unpacking
|
|
-- stopped. This can be used as init value for subsequent calls. The following
|
|
-- results are the values according to the format string. Numerical values in
|
|
-- the format string are interpreted as repetitions like in pack, except if used
|
|
-- with A, B or H, in which cases the number tells unpack how many bytes to
|
|
-- read. Unpack stops if either the format string or the binary data string are
|
|
-- exhausted.
|
|
--@param format Format string, used to unpack values out of data string.
|
|
--@param data String containing packed data.
|
|
--@param init Optional starting position within the string.
|
|
--@return Position in the data string where unpacking stopped.
|
|
--@return All unpacked values.
|
|
function bin.unpack(format, data, init)
|
|
|