關於x64彙編呼叫api的問題

2021-06-20 03:43:21 字數 850 閱讀 5302

以radasm為例子

win32彙編呼叫api比較簡單

invoke api名字,引數

64位的就不會了

用ida看了一下生成的彙編**,下面是個例子

call    cs:getcurrentprocess

mov     r9d, 0ch        ; nsize

mov     r8, rdi         ; lpbuffer

mov     rdx, rsi        ; lpbaseaddress

mov     rcx, rax        ; hprocess

mov     [rsp+38h+var_18], 0

call    cs:writeprocessmemory

mov     rbx, [rsp+38h+arg_0]

mov     rsi, [rsp+38h+arg_8]

mov     eax, 1

add     rsp, 30h

pop     rdi

retn

32位的就比較好理解,直接push

push    0               ; lpnumberofbyteswritten

push    5               ; nsize

push    offset unk_10003018 ; lpbuffer

push    lpaddress       ; lpbaseaddress

push    hprocess        ; hprocess

call    writeprocessmemory

有沒有相關資料介紹下呼叫的規則?

x64內聯彙編

建立 asm,寫入測試彙編 code asmadd proc mov rax,rcx add rax,rdx retasmadd endp end整形引數順序 rcx,rdx,r8,r9,rsp 浮點引數順序 xmm1,xmm2,xmm3.混合引數順序 第乙個引數整形 rcx,第二個引數浮點 xmm...

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位元組的引數用參照傳遞,不能把乙個...