Как найти текущее место разрыва программы
Я попытался добавить это внутри функции системного вызова brk:
void *addr = sbrk(0);
printk("current-add-is-%p-\n", addr);
Но он вернул ошибку во время компиляции ядра, что неявное объявление функции sbrk. И я не смог найти где определяется sbrk!! Все, что мне нужно, это измерить то, что всякий раз, когда какой-либо пользовательский процесс пытается расширить свой адрес прерывания программы, я буду знать его текущий адрес прерывания программы, чтобы я мог измерить, сколько запрашивают процессы памяти.
Спасибо.
2 ответа
Похоже, вы пытаетесь сделать что-то не так.
Нет системного вызова sbrk, есть brk. За исключением того, что он будет называться sys_brk, но у вас нет причин его называть. Поэтому, если вы хотите узнать, как узнать текущий адрес разрыва, прочитайте источники brk.
Тем не менее, куда именно вы положили это, если вам не удалось найти источники БРК?
Добавьте эту строку кода:
printf("Address of program break is %p\n", (void *)sbrk(0));
Он вернет сообщение на терминал с шестнадцатеричным адресом прерывания программы (например, 0x#### #### ####.)
Если вы хотите, чтобы адрес был не в шестнадцатеричном формате, используйте %u или аналогичный. Использование
sbrk(0)
задокументирован в man-страницах (руководстве программиста Linux).
Чтобы просмотреть документацию, введите в командной строке:
man sbrk
и документация появится.