python 익스코드를 작성한 뒤, gdb 를 attach 해 코드를 디버깅하고싶을때, gdb.attach() 를 사용합니다.
from pwn import *
r=process("./program")
payload='~~~~~'
###attach###
gdb.attach(r)
pause()
###attach###
r.sendline(payload)
r.interactive()
payload 를 보내는 부분 전에 (종료되기때문)
gdb.attach(r) ; pause() 이렇게 코드를 삽입해줍니다.
# gdb.attach(r) 이 안먹힐때는 수동으로할 수 있습니다.
[ 수동버전 ]
gdb.attach(r) 은 쓰지않고,
pause() 만 작성합니다.
코드를 실행시킨 뒤, 오른쪽 위에 process id 를 확인해 줍니다.
$ sudo gdb attach -p (process id)
새 창을 연뒤, 위 명령어를 입력해서 gdb 를 attach 해줍니다.
짠 ~ 이 모습이 attach 된 모습입니다.
gdb.attach(r) 을 입력했으면, 위의 새 창이 자동으로 뜰껍니다.
원하는곳에 bp 를 걸어서, c (continue) 해줍니다.
여기서 멈추는게 당연하니까, 겁먹지 말고,
아까 실행시킨 python 코드로 돌아와서, 아무키나 누른 뒤, 코드를 계속 실행시켜줍니다.
정상적으로 BP 가 걸린것을 볼 수 있습니다 ! 이제부터 재밌는 디버깅 즐기시면 됩니다.