本實驗是在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 ...