Я пытаюсь использовать функцию brk () в C-программе. Моя цель - использовать его напрямую (как часть более крупного теста), проверяя текущий разрыв программы (pb) с помощью
void *current_break = sbrk(0);
, выполняющего malloc (для тестирования, так как malloc иногда должен выполнять brk, если выделено пространстводостаточно большой)
void* mallow_return = malloc(1);
, а затем непосредственно выполнить brk (), используя текущий адрес + приращение (и проверьте, увеличивает ли это значение pb):
int increase = 0x01;
void * newbreak = current_break + increase;
int return_value = brk(&newbreak);
Моя проблема, то, что ни с большим вызовом malloc (malloc (5000;)), ни с (выравниванием или выравниванием) brk () pb не изменяется. При проверке ошибки я получаю
Невозможно выделить память! error (as given by
strerror (errno)
Кто-нибудь может понять, почему я не могу увеличить разрыв программыв любом случае?
Спасибо за любые подсказки!
(Система: Debian 10 (buster) с ядром 4.19)
Редактировать: По запросу это основная функция с включенными:
#include <unistd.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
void main(int argc, char **argv)
{
printf("[+] Get current program break\n");
void *current_break = sbrk(0);
printf("\t[+] Current break point=\t%#x\n", current_break);
printf("[+] Malloc should call brk as well\n");
void* mallow_return = malloc(1);
printf("[+] Check if malloc changes PB\n");
void *after_break = sbrk(0);
printf("\t[+] After malloc pbreak=\t%#x\n", after_break);
int increase = 0x01;
printf("\t[+] Increasing p-break direclyby %d\n", increase);
void * newbreak = current_break + increase;
printf("\t[+] Setting break point to=\t%#x\n", newbreak);
int return_value = brk(&newbreak);
//check if error was thrown
int errornumber = errno;
if (errornumber != 0)
{
printf("\t[+] Error: %s!\n", strerror(errornumber));
return -1;
}
//check if pb was set now
printf("\t[?] New program break value?\t%#x\n", sbrk(0));
printf("[?] Return value of brk: %d\n", return_value);
return;
}