vm.cpu.breakpoints.remove()
vm.cpu.breakpoints.add_insn(0x804844b)
vm.cpu.breakpoints.add_insn(0x804846b, lambda x:False)
while vm.resume():
    continue
if vm.cpu.gpr.pc != 0x804846b:
    print "failure 1"
    vm.detach()

print "done 1"

#2
vm.cpu.breakpoints.remove()
vm.cpu.breakpoints.add_insn(0x8048483)
vm.resume()
vm.singlestep()
if vm.cpu.gpr.pc != 0x8048485:
    print "failure 2"
    vm.detach()

print "done 2"

#3
vm.cpu.breakpoints.remove()
vm.cpu.breakpoints.add_hw_insn(0x804849e)
vm.resume()
vm.singlestep()
if vm.cpu.gpr.pc != 0x80484a1:
    print "failure 3"
    vm.detach()
vm.cpu.breakpoints.remove()
vm.cpu.breakpoints.add_insn(0x804844b)
vm.cpu.breakpoints.add_insn(0x804846b, lambda x:False)
while vm.resume():
    continue
if vm.cpu.gpr.pc != 0x804846b:
    log("fail", "failure 1")
    vm.detach()

log("info", "done 1")

#2
vm.cpu.breakpoints.remove()
vm.cpu.breakpoints.add_insn(0x8048483)
vm.resume()
vm.singlestep()
if vm.cpu.gpr.pc != 0x8048485:
    log("fail", "failure 2")
    vm.detach()

log("info", "done 2")

#3
vm.cpu.breakpoints.remove()
vm.cpu.breakpoints.add_hw_insn(0x804849e)
vm.resume()
vm.singlestep()
if vm.cpu.gpr.pc != 0x80484a1:
    log("fail", "failure 3")
    vm.detach()