crackNum: Crack various integer and floating-point data formats

[ bsd3, program, tools ] [ Propose Tags ]

Crack IEEE-754 float formats and arbitrary sized words and integers, showing the layout.

For details, please see: http://github.com/LeventErkok/crackNum/


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12 (info)
Change log CHANGES.md
Dependencies base (>=4.11 && <5), directory, filepath, libBF, process, sbv (>=8.14), tasty, tasty-golden [details]
License BSD-3-Clause
Copyright Levent Erkok
Author Levent Erkok
Maintainer erkokl@gmail.com
Category Tools
Home page http://github.com/LeventErkok/CrackNum
Source repo head: git clone git://github.com/LeventErkok/crackNum.git
Uploaded by LeventErkok at 2021-03-30T00:26:15Z
Distributions Arch:3.2, Debian:2.3, LTSHaskell:3.4, Stackage:3.12
Reverse Dependencies 2 direct, 22 indirect [details]
Executables crackNum
Downloads 16735 total (142 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2021-03-30 [all 3 reports]

Readme for crackNum-3.0

[back to package description]

Decode/Encode Integers, Words, and IEE754 Floats

Hackage version Build Status

Usage: crackNum value OR binary/hex-pattern
  -i N               Signed   integer of N-bits
  -w N               Unsigned integer of N-bits
  -f fp              Floating point format fp
  -r rm              Rounding mode to use. If not given, Nearest-ties-to-Even.
  -h, -?  --help     print help, with examples
  -v      --version  print version info

Examples:
 Encoding:
   crackNum -i4   -- -2              -- encode as 4-bit signed integer
   crackNum -w4   2                  -- encode as 4-bit unsigned integer
   crackNum -f3+4 2.5                -- encode as float with 3 bits exponent, 4 bits significand
   crackNum -f3+4 2.5 -rRTZ          -- encode as above, but use RTZ rounding mode.
   crackNum -fbp  2.5                -- encode as a brain-precision float
   crackNum -fdp  2.5                -- encode as a double-precision float

 Decoding:
   crackNum -i4   0b0110             -- decode as 4-bit signed integer, from binary
   crackNum -w4   0xE                -- decode as 4-bit unsigned integer, from hex
   crackNum -f3+4 0b0111001          -- decode as float with 3 bits exponent, 4 bits significand
   crackNum -fbp  0x000F             -- decode as a brain-precision float
   crackNum -fdp  0x8000000000000000 -- decode as a double-precision float

 Notes:
   - For encoding:
       - Use -- to separate your argument if it's a negative number.
       - For floats: You can pass in NaN, Inf, -0, -Inf etc as the argument, along with a decimal float.
   - For decoding:
       - Use hexadecimal (0x) or binary (0b) as input. Input must have one of these prefixes.
       - You can use _,- or space as a digit to improve readability for the pattern to be decoded

VIM users: You can use the https://github.com/LeventErkok/crackNum/blob/master/crackNum.vim file to use CrackNum directly from VIM. Simply locate your cursor on the text to crack, and use the command :CrackNum options.

Example: Encode a decimal numer as a single-precision IEEE754 number

$ crackNum -fsp -- -2.3e6
Satisfiable. Model:
  ENCODED = -2300000.0 :: Float
                  3  2          1         0
                  1 09876543 21098765432109876543210
                  S ---E8--- ----------S23----------
   Binary layout: 1 10010100 00011000110000110000000
      Hex layout: CA0C 6180
       Precision: Single
            Sign: Negative
        Exponent: 21 (Stored: 148, Bias: 127)
  Classification: FP_NORMAL
          Binary: -0b1.0001100011000011p+21
           Octal: -0o1.061414p+21
         Decimal: -2300000.0
             Hex: -0x2.3186p+20
   Rounding mode: RNE: Round nearest ties to even.

Example: Decode a double-precision IEEE754 number from memory-layout

$ crackNum -fdp 0xfc00 abc1 7F80 0001
Satisfiable. Model:
  DECODED = -2.0307920360962302e289 :: Double
                  6    5          4         3         2         1         0
                  3 21098765432 1098765432109876543210987654321098765432109876543210
                  S ----E11---- ------------------------S52-------------------------
   Binary layout: 1 11111000000 0000101010111100000101111111100000000000000000000001
      Hex layout: FC00 ABC1 7F80 0001
       Precision: Double
            Sign: Negative
        Exponent: 961 (Stored: 1984, Bias: 1023)
  Classification: FP_NORMAL
          Binary: -0b1.0000101010111100000101111111100000000000000000000001p+961
           Octal: -0o2.05274057740000001p+960
         Decimal: -2.0307920360962302e289
             Hex: -0x2.15782FF000002p+960

Example: Encode an integer as a 7-bit signed word

$ crackNum -i7 12
Satisfiable. Model:
  ENCODED = 12 :: IntN 7
                  654 3210
   Binary layout: 000 1100
      Hex layout: 0C
            Type: Signed 7-bit 2's complement integer
            Sign: Positive
          Binary: 0b1100
           Octal: 0o14
         Decimal: 12
             Hex: 0xc