Linux: brk() 错误 'Cannot allocate memory'
Linux: brk() error 'Cannot allocate memory'
我正在尝试在 C 程序中使用 brk() 函数。我的目标是通过使用
检查当前程序中断 (pb) 来直接使用它(作为更大测试的一部分)
void *current_break = sbrk(0);
执行 malloc(用于测试,因为如果分配的 space 足够大,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 都没有改变。检查错误号时,我得到
Cannot allocate memory!error (as given by
strerror(errno)
有人能看出为什么我无论如何都无法增加程序中断吗?
感谢任何提示!
(系统是:Debian 10 (buster) with kernel 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;
}
(感谢@Antii Haapala,他将此作为评论发布。)
我们需要删除这里的符号:
int return_value = brk(&newbreak);
那一行应该很简单
int return_value = brk(newbreak);
我正在尝试在 C 程序中使用 brk() 函数。我的目标是通过使用
检查当前程序中断 (pb) 来直接使用它(作为更大测试的一部分)void *current_break = sbrk(0);
执行 malloc(用于测试,因为如果分配的 space 足够大,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 都没有改变。检查错误号时,我得到
Cannot allocate memory!
error (as given by
strerror(errno)
有人能看出为什么我无论如何都无法增加程序中断吗?
感谢任何提示!
(系统是:Debian 10 (buster) with kernel 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;
}
(感谢@Antii Haapala,他将此作为评论发布。)
我们需要删除这里的符号:
int return_value = brk(&newbreak);
那一行应该很简单
int return_value = brk(newbreak);