Estaba probando un desbordamiento de búfer y sucedió lo siguiente:
Ladirecciónderetornoestáen0xbffff7bc
,loquedescubríenlaspruebas.Loreemplacéconelvalorquequería0xbffff636
.
Cuandosellamaareturn,parecedirigirseaunadireccióndiferentealaqueagregué.Desdelatrazaposteriorsepuedeverqueprobótodaslasdireccionesjuntoaesa.
Sinembargo,reemplazó0xbffff636
con0xbffff71b
.Claramente,nocambiólasotrasdireccionesalasqueintentóregresarenelbacktrace1a6,pero0esincorrecto.Pareceque#0deberíahabersido0xbffff636
peroseeditó,comotodaslasotrasdireccionesdespuésdequeseprobaron.
¿Cuálesunaposiblerazónporlaquesecambióladirección?
EDIT/UPDATE
Estomuestraloqueestáenladirección0xbffff636
queeslamitaddeuntrineoNOP.Elbúferesde500bytes,ladirecciónderetornoestáen540offset.
Actualmente estoy en un punto de ruptura en la declaración de devolución, y lo que es extraño es que hacer una traza hacia atrás en el punto muestra que se intentó con 0xbffff636
como un punto de devolución, pero aún no he regresado. Cuando continúo y devuelvo, el backtrace se convierte en el backtrace que publiqué originalmente con '0xbff636' convirtiéndose en '0xbffff71b'. Pensé que podría añadir eso.
ACTUALIZACIÓN2 Aquí está la parte relevante del código del libro:
Enlugardecontinuar,continúo'siguiente'atravésdelprogramahastaquedejélafunciónrecv_line
quecopiólosdatosenunbúfer(solicitudllamada)quesepasó.Esafunciónvolvióbienyaquenotoquésudirección.Ahoracontinuéatravésdelafuncióndelcontroladoranteriorhastaquelleguéalfinalyestoesloquevi:
Parece que no encuentra 0xbfff636
válido cuando lo ve por primera vez. He hecho desbordamientos en este entorno antes, por lo que estoy bastante seguro de que no hay protecciones.
Nota : estoy compilando con -g marca de depuración. Ejecuto el proceso como sudo. Luego adjúntelo al proceso en ejecución con gdb