系统如何知道数据段的结束
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
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