[Gelöst] ASM-Funktion 5ter Parameter wird nicht übergeben?!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

[Gelöst] ASM-Funktion 5ter Parameter wird nicht übergeben?!

Beitrag von Mijikai »

Ich versuche gerade mehr als 4 Parameter an eine ASM-Funktion zu übergeben.
Eigentlich sollte der Parameter auf dem Stack liegen -> [rsp+28h]...
Leider wird der Parameter nicht übergeben :(
Was macht PureBasic hier?
Wo ist mein Fehler? :freak:

PB Code:

Code: Alles auswählen

;PB v.5.61 x64

Import "TestFnc64.OBJ"
  TestFnc(p1.i,p2.i,p3.i,p4.i,p5.i)
EndImport

Debug TestFnc(1,2,3,4,5);sollte 5 zurückgeben!
ASM OBJ Code:

Code: Alles auswählen

;FASM
format MS64 COFF
include 'win64a.inc'
;...............................................
public TestFnc
;...............................................
proc TestFnc
     ;mov rax,rcx       ;p1 - ok
     ;mov rax,rdx       ;p2 - ok
     ;mov rax,r8        ;p3 - ok 
     ;mov rax,r9        ;p4 - ok
     mov rax,[rsp+28h]  ;p5 ~ funzt nicht?!
     ret
endp
;............................................... 
Zuletzt geändert von Mijikai am 16.01.2018 21:10, insgesamt 1-mal geändert.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: ASM-Funktion 5ter Parameter wird nicht übergeben?!

Beitrag von _JON_ »

Könnte es etwas mit dem 16-Byte Alignment zu tun haben?

mov rax,[rsp+30h] ;p5 - ok
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: ASM-Funktion 5ter Parameter wird nicht übergeben?!

Beitrag von NicTheQuick »

Die nächsten Parameter sind auf dem Stack. Siehe Microsoft x64 calling convention.

Edit: Sorry, das nächste mal sollte ich genauer lesen. Das weißt du ja selbst schon. :doh:
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: ASM-Funktion 5ter Parameter wird nicht übergeben?!

Beitrag von Mijikai »

Danke für die schnellen Antworten :)
_JON_ hat geschrieben:Könnte es etwas mit dem 16-Byte Alignment zu tun haben?

mov rax,[rsp+30h] ;p5 - ok
Das ist korrekt :D
Ich dachte irgendwie das der Parameter bei + 28h sein müsste.
Aber selbst mit +30h ging bei mir Anfangs nichts weil ich noch das 'locals' Makro
verwendet habe. :roll: :oops:

Wenn man 'locals' verwendet ist der 5te Parameter bei -> [rsp + 30h + 8 * VariableCount]
Antworten