Skip to content

Instantly share code, notes, and snippets.

@makenowjust
Created December 11, 2024 10:07
Show Gist options
  • Save makenowjust/66105ba2f1634808779812d768f6aad7 to your computer and use it in GitHub Desktop.
Save makenowjust/66105ba2f1634808779812d768f6aad7 to your computer and use it in GitHub Desktop.
$b = []
def op_proto(version)
$b.concat([0x80, version])
end
def op_global(mod, name)
$b.concat("c#{mod}\n#{name}\n".unpack("C*"))
end
def op_binunicode(str)
n = str
$b.concat("X".unpack("C*"))
$b.concat([str.size].pack("I").unpack("C*"))
$b.concat(str.unpack("C*"))
end
def op_shortbinbytes(bytes)
$b.concat("C".unpack("C*"))
$b.concat([bytes.size].pack("C").unpack("C*"))
$b.concat(bytes.unpack("C*"))
end
def op_binint(n)
$b.concat("J".unpack("C*"))
$b.concat([n].pack("I").unpack("C*"))
end
def op_dup
$b.concat("2".unpack("C*"))
end
def op_pop
$b.concat("0".unpack("C*"))
end
def op_none
$b.concat("N".unpack("C*"))
end
def op_tuple1
$b.concat([0x85])
end
def op_tuple2
$b.concat([0x86])
end
def op_reduce
$b.concat("R".unpack("C*"))
end
def op_stop
$b.concat(".".unpack("C*"))
end
op_dup
op_tuple2
op_reduce
op_tuple2
op_reduce
#op_pop
#op_none
op_stop
epilogue = $b.dup
$b.clear
op_proto(3)
op_global("os", "write")
op_binint(1)
op_global("builtins", "getattr")
op_global("builtins", "bytes")
op_binunicode("__mod__")
op_tuple2
op_reduce
prologue = $b.dup
bytes = prologue.pack("C*") + "C?%s" + epilogue.pack("C*")
#bytes += ((bytes.size + 4) * 2 - 1).to_s + "\n"
bytes[prologue.size + 1] = [bytes.size].pack("C")
op_shortbinbytes(bytes)
op_dup
op_tuple2
op_reduce
op_tuple2
op_reduce
#op_pop
#op_none
op_stop
print $b.pack("C*")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment