Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何找到程序中断的当前位置_Linux_Linux Kernel_Kernel_Sbrk_Brk - Fatal编程技术网

Linux 如何找到程序中断的当前位置

Linux 如何找到程序中断的当前位置,linux,linux-kernel,kernel,sbrk,brk,Linux,Linux Kernel,Kernel,Sbrk,Brk,我尝试在brk系统调用函数中添加以下内容: void *addr = sbrk(0); printk("current-add-is-%p-\n", addr); 但在内核编译过程中,sbrk函数的隐式声明返回了错误。我找不到sbrk的定义!! 我需要测量的是,每当某个用户进程试图扩展它的程序中断地址时,我就会知道它当前的程序中断地址,这样我就可以测量进程请求了多少内存 谢谢。看起来你想做错事 没有“sbrk”系统调用,只有“brk”。除此之外,它将被命名为sys_brk,但您没有理由称之为s

我尝试在brk系统调用函数中添加以下内容:

void *addr = sbrk(0);
printk("current-add-is-%p-\n", addr);
但在内核编译过程中,sbrk函数的隐式声明返回了错误。我找不到sbrk的定义!! 我需要测量的是,每当某个用户进程试图扩展它的程序中断地址时,我就会知道它当前的程序中断地址,这样我就可以测量进程请求了多少内存


谢谢。

看起来你想做错事

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


然而,如果你没有找到brk的资料来源,你到底把它放在哪里了?

看起来你在试图做错事

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

但是,如果你没有找到brk的来源,你到底把它放在哪里了?

添加这行代码:

printf("Address of program break is %p\n", (void *)sbrk(0));
它将向终端返回一条带有程序中断十六进制地址的消息。(例如,0x################)

如果希望地址不是十六进制,请使用%u或类似格式。
sbrk(0)
的使用记录在手册页(linux程序员手册)中

要查看文档,请键入命令行:
MANSBRK
,文档将弹出。

添加这行代码:

printf("Address of program break is %p\n", (void *)sbrk(0));
它将向终端返回一条带有程序中断十六进制地址的消息。(例如,0x################)

如果希望地址不是十六进制,请使用%u或类似格式。
sbrk(0)
的使用记录在手册页(linux程序员手册)中


要查看文档,请在命令行中键入:
MANSBRK
,文档将弹出。

请告诉我“读取brk的源代码”是什么意思,然后将其放入brk系统调用方法中。我知道没有sbrk系统调用。但是sbrk的手册页说,sbrk(0)将给出当前的程序中断地址,所以刚刚尝试了sbrk(0)@ArjunBora:手册页描述了可用于用户空间程序的功能。内核空间代码使用不同的函数集进行操作。@Tsyvarev好的,那么有没有办法从内核空间找到当前的程序中断地址?相当于sbrk(0)谢谢。@ArjunBora:正如回答者所说,您可以研究
brk
syscall实现-这就是
sbrk()
的实际实现方式。也许,您将能够重用它的部分代码来执行所需的任务(获取当前中断地址)。为了搜索系统调用实现,您可以使用
grep-r--将“*.c”-e”SYSCALL_DEFINE1(brk“
包含在内核源代码的顶级目录中。@ArjunBora:当前任务的中断地址应该在
current->mm->brk
中。您能告诉我“读取brk的源代码”是什么意思吗把这个放在brk系统调用方法中。我知道没有sbrk系统调用。但是sbrk的手册页说sbrk(0)将给出当前的程序中断地址,所以只尝试了sbrk(0)@ArjunBora:手册页描述了可用于用户空间程序的函数。内核空间代码使用不同的函数集进行操作。@Tsyvarev好的,那么有没有办法从内核空间找到当前程序中断地址?相当于sbrk(0)谢谢。@ArjunBora:正如回答者所说,您可以研究
brk
syscall实现-这就是
sbrk()
的实际实现方式。您可能能够重用其部分代码来执行所需的任务(获取当前中断地址)。要搜索syscall实现,您可以使用
grep-r。--包括“*.c”-e”SYSCALL_DEFINE1(brk“
位于内核源代码的顶级目录中。@ArjunBora:当前任务的中断地址应位于
current->mm->brk
中。