linux實驗 系統呼叫篇 X64 3 4 1

2021-06-06 23:35:14 字數 588 閱讀 9700

本實驗是在64位的linux3.4.1源**上進行修改的。由於新的版本的**組織方式有些變動,因此以前網上的一些方法不可行。具體的步驟如下:

2.切換到root賬戶,解壓到/usr/src下面

3. 在/kernel/sys.c檔案的最後新增如下**

asmlinkage int sys_addtotal(int numdata)

4.修改/arch/x86/syscalls/syscall_64.tbl 新增**

312     64      addtotal                sys_addtotal

5.在/include/linux/syscalls.h檔案的最後新增如下**

asmlinkage int sys_addtotal(int numdata);

6.編譯核心

重啟,然後測試**如下:

#include "stdio.h"

#include

#include

#define __nr_addtotal 312

//__syscall1(int,addtotal,int, num)

int main()

X64呼叫規範

1.由於位址長度為64位,因此call指令把rsp 堆疊指標 暫存器的值減去8.2.第一批傳遞子程式的四個引數依次存放於暫存器rcx rdx r8 r9。因此,如果只傳遞乙個引數就會放到rcx暫存器中。如果還有第二引數就會將其放入rdx暫存器中,其他引數從右至左入棧。3.長度不足64位的引數不進行零...

windows程式設計 x64呼叫約定

windows32位程式包括stdcall,thiscall,fastcall,cdecl,clrcall,vectorcall,nakedcall等呼叫方式,x64位程式預設使用新的fastcall呼叫方式。這種呼叫方式得益於x64平台暫存器數量的增加。空間大於8位元組的引數用參照傳遞,不能把乙個...

關於x64彙編呼叫api的問題

以radasm為例子 win32彙編呼叫api比較簡單 invoke api名字,引數 64位的就不會了 用ida看了一下生成的彙編 下面是個例子 call cs getcurrentprocess mov r9d,0ch nsize mov r8,rdi lpbuffer mov rdx,rsi ...