gpt4 book ai didi

Linux sbrk() 作为汇编中的系统调用

转载 作者:太空狗 更新时间:2023-10-29 11:15:44 25 4
gpt4 key购买 nike

因此,作为挑战和性能,我正在用汇编语言编写一个简单的服务器。我知道的唯一方法是通过系统调用。 (通过 int 0x80)显然,我将需要比在汇编或加载时分配的内存更多的内存,所以我阅读并决定我想使用 sbrk(),主要是因为我不理解 mmap() :p

无论如何,Linux 没有为 sbrk() 提供中断,只有 brk()。

那么...我如何找到当前程序中断以使用 brk()?我考虑过使用 getrlimit(),但我不知道如何获取资源(我猜是进程 ID)以传递给 getrlimit()。或者我应该找到其他方法来实现 sbrk() 吗?

最佳答案

sbrk 函数可以通过获取当前值并手动减去所需数量来实现。某些系统允许您使用 brk(0) 获取当前值,其他系统在变量中跟踪它 [使用 _end 的地址初始化,该地址已设置由链接器向上指向初始中断值]。

这是一个非常特定于平台的东西,所以 YMMV。

编辑:在 Linux 上:

However, the actual Linux system call returns the new program break on success. On failure, the system call returns the current break. The glibc wrapper function does some work (i.e., checks whether the new break is less than addr) to provide the 0 and -1 return values described above.

因此,从汇编中,您可以使用诸如 0 或 -1 之类的荒谬值来调用它以获取当前值。

请注意,您不能“释放”通过 brk 分配的内存 - 您可能只想链接一个用 C 编写的 malloc 函数。从汇编调用 C 函数并不难。

关于Linux sbrk() 作为汇编中的系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com