linux - 请求nasm中sys_fork的例子

标签 linux assembly nasm

我正在尝试运行 bzip 并让它从 nasm 编码的汇编程序(在 linux 下)内部将控制权返回给调用函数。我显然需要结合使用 sys_fork 和 sys_execve 系统调用来实现这一点。经过大量搜索,我找到了一个如何使用 sys_execve 的示例,但是我找不到一个如何使用 sys_fork 的示例。对我的请求的任何帮助将不胜感激。

最佳答案

我的经验有限,但我记得 sys_fork 很简单。 “Just do it”——没有参数。此时,您“同时在两个地方”。如果 eax 为零,则您就是 child - 在 bzip 上执行 sys_execve。如果 eax 为非零(且非负!),则您是父级,而 eax 是您的 PID。对该 PID 执行 sys_waitpid。我记得,这返回 bzip 的退出状态左移 8 个字节 - sys_execve 本身永远不会返回。

我有一个运行编辑器、nasm 和 ld(都在硬编码的“hello.asm”上)的粗略示例。发帖时间有点长,但如果您需要,我可以通过某种方式提供。我发现为 sys_execve 获取正确的参数是最困难的部分,我记得。

关于linux - 请求nasm中sys_fork的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808640/

相关文章:

linux - 无法弄清楚如何编译 Linux 内核模块

assembly - 为什么要将他已经拥有的相同值复制到 rax 中?

linux - 了解 NASM 程序集中的递归阶乘函数

linux - 使所有线程休眠 linux/unix

linux - 在 Linux 内核中使用 hrtimers

assembly - 是否有任何语言/编译器使用具有非零嵌套级别的 x86 ENTER 指令?

c - 汇编维吉尼亚密码程序

linux - 主要和堆栈对齐

c# - .NET Core for Linux with dockers - 创建 docker 镜像

assembly - 将堆栈中的数据弹出到命名变量中?或者用MOV存储一个寄存器?