README.md
Rendering markdown...
class RopChain {
constructor(memory, base = 0n) {
this.memory = memory;
this.base = BigInt(base);
this.chain = [];
}
push(value) {
this.chain.push(BigInt(value));
return this;
}
// Convenience helper that mirrors a typical "call gadget" layout.
pushCall(gadgetAddr, ...args) {
this.push(gadgetAddr);
args.forEach(arg => this.push(arg));
return this;
}
finalize() {
const chainSize = this.chain.length * 8;
const chainAddr = this.memory.allocate(chainSize);
this.chain.forEach((value, index) => {
this.memory.write64(chainAddr + index * 8, this.base + value);
});
return chainAddr;
}
get length() {
return this.chain.length;
}
}
module.exports = { RopChain };