J'ai des difficultés à réinitialiser un processus après avoir atteint un point d'arrêt avec Ptrace. Je suis essentiellement l'emballage this code en python.
Je cours cela sur Ubuntu 64 bits.Ptrace réinitialise un point d'arrêt
Je comprends le concept de réinitialiser les données à l'emplacement et décrémenter le pointeur d'instruction, mais après avoir reçu le signal de piège et faire cela, mon processus ne se termine pas. Extrait de code:
# Continue to bp
res = libc.ptrace(PTRACE_CONT,pid,0,0)
libc.wait(byref(wait_status))
if _wifstopped(wait_status):
print('Breakpoint hit. Signal: %s' % (strsignal(_wstopsig(wait_status))))
else:
print('Error process failed to stop')
exit(1)
# Reset Instruction pointer
data = get_registers(pid)
print_rip(data)
data.rip -= 1
res = set_registers(pid,data)
# Verify rip
print_rip(get_registers(pid))
# Reset Instruction
out = set_text(pid,c_ulonglong(addr),c_ulonglong(initial_data))
if out != 0:
print_errno()
print_text(c_ulonglong(addr),c_ulonglong(get_text(c_void_p(addr))))
Et je lance un PTRACE_DETACH juste après le retour de ce code. Lorsque je l'exécute, il atteint le point d'arrêt que le processus parent renvoie avec succès, mais l'enfant ne reprend pas et ne termine pas son code. Si je commente l'appel à la fonction breakpoint, il attache simplement ptrace au processus, puis le détache, et le programme s'exécute correctement.
Le programme lui-même est juste un petit programme c qui imprime 10 fois dans un fichier.
Y at-il une erreur voit quelqu'un avec mon code de point d'arrêt?