Rating:

Simple GDB Scripting
```
import gdb

class MyBreakPoint(gdb.Breakpoint):
def stop(self):
global state, bl, ans
if state == 0:
bl = gdb.parse_and_eval("$bl")
state = 1
elif state == 1:
state = 0
al = gdb.parse_and_eval("$al")
ans.append(chr(bl^al))
return False

state = 0
bl = 0
ans = []
gdb.execute("b *0x4149B0")
MyBreakPoint("*0x4020A7")
MyBreakPoint("*0x40213b")
gdb.execute("b *0x4021f3")
gdb.execute("r <<< 'helloworld'")
gdb.execute("set $rax=0")
#gdb.execute("awatch *0x4149B0")
gdb.execute("set $rax=0")
gdb.execute("c")
print("".join(ans))
gdb.execute("q")
```