import com.upstandinghackers.hammer.*; import java.util.Arrays; /** * Example JHammer usage */ public class Example { static { System.loadLibrary("jhammer"); } private static void handle(ParseResult result) { if(result == null) { System.out.println("FAIL"); } else { System.out.println("PASS"); handleToken(result.getAst()); } } private static void handleToken(ParsedToken p) { if(p==null) { System.out.println("Empty AST"); return; } switch(p.getTokenType()) { case NONE: out("NONE token type"); break; case BYTES: out("BYTES token type, value: " + Arrays.toString(p.getBytesValue())); break; case SINT: out("SINT token type, value: " + p.getSIntValue()); break; case UINT: out("UINT token type, value: " + p.getUIntValue()); break; case SEQUENCE: out("SEQUENCE token type"); for(ParsedToken tok : p.getSeqValue()) {handleToken(tok);} break; case ERR: out("ERR token type"); break; case USER: out("USER token type"); break; } } private static void out(String msg) { System.out.println(">> " + msg); } public static void main(String args[]) { out("chRange"); handle(Hammer.parse(Hammer.chRange((byte)0x30, (byte)0x39), "1".getBytes(), 1)); handle(Hammer.parse(Hammer.chRange((byte)0x30, (byte)0x39), "a".getBytes(), 1)); out("ch"); handle(Hammer.parse(Hammer.ch((byte)0x31), "1".getBytes(), 1)); handle(Hammer.parse(Hammer.ch((byte)0x31), "0".getBytes(), 1)); out("token"); handle(Hammer.parse(Hammer.token("herp".getBytes(), 4), "herp".getBytes(), 4)); handle(Hammer.parse(Hammer.token("herp".getBytes(), 4), "derp".getBytes(), 4)); out("intRange"); byte inbytes[] = {0x31, 0x31, 0x31, 0x31}; handle(Hammer.parse(Hammer.intRange(Hammer.uInt8(), 0L, 0x32), inbytes, inbytes.length)); handle(Hammer.parse(Hammer.intRange(Hammer.uInt8(), 0L, 0x30), inbytes, inbytes.length)); out("bits"); handle(Hammer.parse(Hammer.bits(7, false), inbytes, inbytes.length)); out("int64"); byte ints[] = {(byte)0x8F, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}; handle(Hammer.parse(Hammer.int64(), ints, ints.length)); handle(Hammer.parse(Hammer.int64(), inbytes, inbytes.length)); out("choice"); Parser two32s[] = {Hammer.intRange(Hammer.uInt32(), 0x00, 0x01), Hammer.int32()}; handle(Hammer.parse(Hammer.choice(Hammer.intRange(Hammer.uInt32(), 0x00, 0x01), Hammer.int32()), ints, ints.length)); out("sequence"); byte i3[] = {(byte)'i', (byte)3, (byte)0xFF}; Parser i3parsers[] = {Hammer.ch((byte)'i'), Hammer.uInt8(), Hammer.int8()}; handle(Hammer.parse(Hammer.sequence(Hammer.ch((byte)'i'), Hammer.uInt8(), Hammer.int8()), i3, i3.length)); } }