我尝试在 brk 系统调用函数中添加它:
void *addr = sbrk(0);
printk("current-add-is-%p-\n", addr);
但它在内核编译期间返回错误,即隐式声明 sbrk 函数。而且我找不到定义 sbrk 的位置!!我需要测量的是,每当某个用户进程试图扩展它的程序中断地址时,我就会知道它当前的程序中断地址,这样我就可以测量有多少内存进程正在请求。
谢谢你。
我尝试在 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 %p\n", (void *)sbrk(0));
它将向终端返回一条带有程序中断的十六进制地址的消息。(例如,0x#### #### ####。)
如果您想要十六进制以外的地址,请使用%u或类似的。的使用sbrk(0)
记录在手册页(linux 程序员手册)中。
要查看文档,请输入命令行: man sbrk
然后会弹出文档。