我想知道 exec() 系统调用参数存储在哪些寄存器中。
我首先运行了一个简单的 C 程序,它执行 exec 系统调用并获取其对象转储,发现 RDI 被用于包含要执行的进程的参数,并且 syscall 指令被用于在内核中调用 execve。我是在 64 位 Ubuntu 12.04 操作系统中完成的
然后我在 QEMU 上运行的 Ubuntu 11.10 OS(32 位)上运行了这个程序。但是现在在没有 0x80 的对象转储中断中被使用并且参数在 EBX 中。
我在两个方面感到困惑..为什么在一个地方使用 int80 而在另一个地方使用 syscall 以及如何选择 execve 系统调用的寄存器?