1

我尝试在 brk 系统调用函数中添加它:

void *addr = sbrk(0);
printk("current-add-is-%p-\n", addr);

但它在内核编译期间返回错误,即隐式声明 sbrk 函数。而且我找不到定义 sbrk 的位置!!我需要测量的是,每当某个用户进程试图扩展它的程序中断地址时,我就会知道它当前的程序中断地址,这样我就可以测量有多少内存进程正在请求。

谢谢你。

4

2 回答 2

0

看起来你正试图做错事。

没有“sbrk”系统调用,只有“brk”。除非它被命名为 sys_brk,但你没有理由调用它。因此,如果您想了解如何了解当前中断地址,请阅读 brk 的来源。

但是,如果您没有碰巧找到 brk 的来源,您究竟把它放在了哪里?

于 2016-03-07T17:46:31.253 回答
0

添加这行代码:

printf("Address of program break is %p\n", (void *)sbrk(0));

它将向终端返回一条带有程序中断的十六进制地址的消息。(例如,0x#### #### ####。)

如果您想要十六进制以外的地址,请使用%u或类似的。的使用sbrk(0)记录在手册页(linux 程序员手册)中。

要查看文档,请输入命令行: man sbrk然后会弹出文档。

于 2020-12-15T12:49:39.343 回答