我尝试在brk系统调用函数中添加它:
void *addr = sbrk(0);
printk("current-add-is-%p-n", addr);
但它在内核编译期间返回了隐式声明 sbrk 函数的错误。而且我找不到定义 sbrk 的位置!!我只需要测量,每当某个用户进程尝试扩展其程序中断地址时,我都会知道其当前的程序中断地址,以便我可以测量请求的内存进程量。
谢谢。
看起来你试图做错什么。
没有"sbrk"系统调用,有"brk"。除此之外,它将被命名为sys_brk,但你没有理由称呼它。因此,如果您想了解如何了解当前的中断地址,请阅读 brk 的来源。
但是,如果您没有碰巧找到 brk 的来源,您究竟把它放在哪里?
添加以下代码行:
printf("Address of program break is %pn", (void *)sbrk(0));
它将向终端返回一条消息,其中包含程序中断的十六进制地址。(例如,0x###
# ## ####。如果希望地址不是十六进制,请使用 %u 或类似地址。手册页(Linux 程序员手册)中记录了sbrk(0)
的使用。
要查看文档,请在命令行中键入: man sbrk
,文档将弹出。