@include @define test1() { @local ctl, mux, ns, as, dom; mux = mkctlmux_local(); ctl = mux.launch(["./mclones32"], 0); as = ctl.mem(); ns = ctl.ns(); dom = mkdom(ns, as); printf("&dom`xmalloc = %p\n", &dom`xmalloc); printf("&dom`xfree = %p\n", &dom`xfree); dom.xtrap(&dom`xmalloc, @lambda(ctl){ @local ra, regs, mem, arg, tid; mem = mkdom(ns, ctl.mem()); regs = ctl.reg(); ra = *((unsigned*){mem}regs->rsp); arg = *((unsigned*){mem}(regs->rsp+4)); printf("xmalloc %d\t%x\t%d ...\n", ctl.id, ra, arg); tid = mem.xtrap(ra, @lambda(ctl){ @local regs; regs = ctl.reg(); printf("xmalloc %d\t%x\t%d -> %x\n", ctl.id, ra, arg, regs->rax); ctl.trapdel(tid); return nil; }); printf("set trap %d\n", tid); return nil; }); dom.xtrap(&dom`xfree, @lambda(ctl){ @local ra, regs, mem, arg; mem = mkdom(ns, ctl.mem()); regs = ctl.reg(); ra = *((unsigned*){mem}regs->rsp); arg = *((unsigned*){mem}(regs->rsp+4)); printf("xfree %d\t%x\t%x\n", ctl.id, ra, arg); return nil; }); dom.xcont(); mux.run(); } test1();