系统如何知道数据段的结束

How the system know the end of data segment

2个问题(同一主题):

一些例子:

假设我在 assembly(GCC 编译)中有类似的东西:

movl 12 -4(%rbp)

当我将地址 -4(%rbp) 提供给另一条指令时,系统将如何 知道在哪里停止 ?因为 -4(%rbp) 是起始地址,但我们没有关于停止的任何信息,它可能是 2x2bytes 而不是4字节。

我的第二个问题有点相同,但是 使用堆 ,考虑到我使用的是 sbrk :

当我调用 sbrk(0) 时,它将给出堆中 break 的地址。
假设我正在使用 sbrk(20) 然后 sbrk(40) 中断将被移动,现在我正在尝试访问由 sbrk(20) 分配的 space,与程序集相同,系统如何知道什么时候停止而不是在 sbrk(40) space 上溢出?

可能有点迷糊,要我多开发就告诉我吧

movl的'l'表示long(32位整数,64位浮点数)。 最后一个字母定义大小(在气体语法中)。 维基:https://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax