Published
Edited
Sep 30, 2020
Insert cell
md`# EVM1 Dis`
Insert cell
dims = ["Value", "Mnemonic", "Gas Used", "Subset", "Removed from stack", "Added to stack", "Notes", "Formula Notes"]
Insert cell
dims2 = ["Value", "Mnemonic", "[]", "[]", "STOP()", "Notes", "1", "true", ""]
Insert cell
Insert cell
Insert cell
ops = raw.split("\n").map(x=>x.split(","))
Insert cell
ops2 = raw2.split("\n").map(x=>x.split("|"))
Insert cell
mutable mops = Object()

Insert cell
mutable mops2 = Object()

Insert cell
{
ops.map(x=>{
mutable mops[x[0].slice(2)] = x
})
}
Insert cell
{
ops2.map(x=>{
mutable mops2[x[0]] = x
})
}
Insert cell
code1 = "0x60606040526000357c010000000000000000000000000000000000000000000000000000000090048063771602F7146037576035565b005b60546004808035906020019091908035906020019091905050606A565b6040518082815260200191505060405180910390f35b6000818301905080505b9291505056"
Insert cell
function dis(codes, source1){
console.log(source1, codes)
if (codes[0] == "0" && codes[1] == "x") return dis(codes.slice(2) , source1)
let op = mops[codes.slice(0,2)]
//console.log(codes.slice(0,2),op,source1)
if ( op) {
source1.push(op)
let c = codes.slice(2)
return dis(c, source1)
}
if (codes == "") return source1
source1.push(mops["fe"])
let c = codes.slice(2)
console.log(c, source1)
return dis(c, source1)
}
Insert cell
dis(code1,[])
Insert cell
function dis2(codes, source1){
console.log(source1, codes)
if (codes[0] == "0" && codes[1] == "x") return dis2(codes.slice(2) , source1)
let op = mops2[codes.slice(0,2)]
console.log(op)
if ( op) {
source1.push(op)
let hop = 2*parseInt(op[6])
let rest = codes.slice(2, hop)
if (rest != "") source1.push([ rest, "0x" + rest])
let c = codes.slice(hop)
return dis2(c, source1)
}
if (codes == "") return source1
source1.push(mops2["FE"])
let c = codes.slice(2)
console.log(c, source1)
return dis2(c, source1)
}
Insert cell
byte2 = "7f1122334455667788990000000000000000000000000000000000000000000000600052600960002060005260206000f3000000000000000000000000000000".toUpperCase()
Insert cell
dis2(byte2,[]).map(x=>x[1]).join("\n")

Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more