Estoy tratando de desmontar un programa para ver una instrucción de ensamblaje syscall (la instrucción INT, creo) y el controlador con GDB y he escrito un pequeño programa (ver a continuación) para que abra y cierre un archivo. Pude seguir la llamada para abrir con GDB hasta que ejecutó una llamada. Cuando traté de decirle a GDB "disassemble 0x ...." (dirección de llamada), respondió con 'Ninguna función contiene la dirección especificada'. ¿Es posible obligar a GDB a desmontar (o mostrarlo en el ensamblador lo mejor posible) esa dirección de memoria? ¿Si es así, cómo?¿Cómo puedo obligar a GDB a desmontar?
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* f;
f = fopen("main.c", "r");
if (!f) {
perror("open");
return -1;
}
fclose(f);
return 0;
}
fopen() no es una llamada al sistema, es una llamada a la biblioteca estándar C. ¿Y por qué crees que una llamada al sistema debe hacerse a través de una instrucción INT? –
Puedo estar equivocado, pero nos enseñaron que las llamadas fopen finalmente resultan en una llamada al kernel para abrir el archivo y devolver un descriptor de archivo? – Patrick
Patrick: Sí, pero no necesita hacer eso directy. Normalmente llama a la función libc que luego ingresa kernel. Pero llamar kernel puede hacerse no solo con int (esto es lento) sino con syscall/sysenter dependiendo de la arquitectura del procesador ... – k3a