Я пытаюсь разобрать программу, чтобы увидеть инструкцию сборки syscall (инструкция INT, я полагаю), и обработчик с GDB и написал небольшую программу (см. Ниже) для нее, которая открывает и закрывает файл. Я смог выполнить вызов, чтобы открыть с GDB, пока он не выполнит вызов. Когда я попытался рассказать GDB «разобрать 0x ....» (адрес вызова), он ответил «Нет функции содержит указанный адрес». Можно ли заставить GDB разобрать (или как можно лучше отобразить его на ассемблере) адрес памяти? Если да, то как?Как заставить GDB разбирать?
#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() не является системным вызовом, это вызов стандартной библиотеки C. И почему, по вашему мнению, системный вызов должен выполняться с помощью инструкции INT? – 2009-08-07 16:25:51
Возможно, я ошибаюсь, но нас учили, что вызовы fopen в конечном итоге приводят к системному вызову ядра, чтобы открыть файл и вернуть дескриптор файла? – Patrick
Патрик: Да, но не нужно это делать. Обычно он вызывает функцию libc, которая затем входит в ядро. Но вызов ядра может выполняться не только с помощью int (это медленно), но с syscall/sysenter в зависимости от архитектуры процессора ... – k3a