Created
December 11, 2024 10:07
-
-
Save makenowjust/66105ba2f1634808779812d768f6aad7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$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