Linux:brk()错误'无法分配内存'

问题描述 投票:-1回答:1

我正在尝试在C程序中使用brk()函数。我的目标是通过使用

检查当前程序中断(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。检查errno时出现Cannot allocate memory!错误(由strerror(errno)给出)

有人可以看到为什么我仍然无法增加程序中断吗?感谢您的提示!

((系统为:Debian 10(破坏者),内核为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;
}
c linux memory-management brk
1个回答
0
投票

感谢@Antii Haapala,问题已解决。只是“&”符号导致错误。谢谢你!

© www.soinside.com 2019 - 2024. All rights reserved.