【发布时间】:2014-01-14 23:26:10
【问题描述】:
在 x64 上,我通过在堆栈上保留一些空间并将所有参数 (6) 复制到堆栈来处理系统调用(我挂钩系统调用,然后自己调用它们)。我保存了所有参数,以便稍后在代码中使用它们。
这就是我的代码的样子(intel 语法):
push rbp;
mov rbp, rsp;
sub rsp, 64;
mov [rbp - 8], rax;
mov [rbp - 16], rdi;
mov [rbp - 24], rsi;
mov [rbp - 32], rdx;
mov [rbp - 40], rcx;
mov [rbp - 48], r8;
mov [rbp - 56], r9;
...
...
...
请注意,我使用rbp 来访问堆栈。
现在我正在尝试为 x86 执行相同的代码。我认为这几乎是一样的,但后来我意识到(根据https://stackoverflow.com/a/2538212/940158)ebp 用于系统调用的第 6 个参数,这意味着我不能使用ebp 来访问堆栈。或者我可以吗?
我怎样才能实现与我在 x64 中所做的相同的事情?
【问题讨论】:
标签: linux assembly linux-kernel cpu-registers system-calls