Français
Assembler Forum

ASM: StdCall avec beliebig vielen Parametern

 
- page 1 -



Uwe
''Pascal''
Niemeier
Hi gens!

dans qui espoir, qui ici qui une ou bien autre ASM-Kenner mitliest, lieu je la fois 'ne Frage:

je cherche une Possibilité, une StdCall-Funktion avec beliebig vielen Parametern aufzurufen.
cela cela grundsätzlich possible ist, zeigt cet Snippet:
TestX proc ;----------------------------------------------------
push ebp
mov eax,ebp
sub eax,esp
sub eax,64
pop ebp

.IF eax==4

    ret 4

.ELSEIF eax==8

    ret 8

.ELSEIF eax==12

    ret 12

.ELSEIF eax==16

    ret 16

.ENDIF

TestX endp;-----------------------------------------------------

cela klappt sowohl comme Funktion dans einer dll comme aussi comme "Embedded ASM" direct dans Profan:
window 800,600
declare a#:dim a#,48
long a#,0=734366549,1088979908,83395421,79824245
long a#,16=-2095256832,91556088,-352319294,217613074
long a#,32=214041973,-2096567552,58003704,4290
imprimer call(a#,1)
imprimer call(a#,1,2)
imprimer call(a#,1,2,3)
imprimer call(a#,1,2,3,4)
waitinput

eh bien denke je mais, es sollte aussi einfacher et universeller aller, indem on par verbiegen de Pointern avec einem einfachen RET auskommt et sich den ténia de IF-Abfragen sparen peux (RET akzeptiert oui aucun Register comme paramètre).
Stehe là allerdings quelque chose sur dem Schlauch, quoi Stack-Manipulationen betrifft.

peux quelqu'un aider?

[OFFTOPIC]BTW: @ iF: Hab's irgendwie pas hingekriegt, cet Posting sous "Assembler" abzulegen [/OFFTOPIC]


SeeYou
Pascal
 
05.11.2010  
 



« cette Beitrag wurde comme Solution gekennzeichnet. »

allô Uwe, ist gelungen...

ou

ou

le bout correct getestet sous 32Bit WinXP XProfan 11.

on muss arrêt qui Rücksprungandresse sichern et cet pour künstlichem réduire des Stacks à qui neue Stackposition enlever.

Würde mich freuen si Du avec cela quelque chose anfangen peux.
 
05.11.2010  
 



je crois je wüsste déjà comment on cela ... je teste cela aujourd'hui soir juste la fois et berichte. (sans Ifs, Schleifen et jmp eax*sonstwas)

[OFFTOPIC]Hab den Topic per DB pour Assembler déménagé. comme je plan probierte ici dans sous Assembler Topics trop erzeugen (aussi gleichnamige) funktionierte cela problemlos. quoi oui c'est ca était passiert cela sich cela Thema ici pas enlever ließ?[/OFFTOPIC]
 
05.11.2010  
 



allô Uwe, ist gelungen...

ou

ou

le bout correct getestet sous 32Bit WinXP XProfan 11.

on muss arrêt qui Rücksprungandresse sichern et cet pour künstlichem réduire des Stacks à qui neue Stackposition enlever.

Würde mich freuen si Du avec cela quelque chose anfangen peux.
 
05.11.2010  
 




Uwe
''Pascal''
Niemeier
Hi iF!

super! Haut hin!

qui Funktion soll toujours seulement une konstanten Wert zurückgeben, mais plan chez beliebig vielen Parametern, indépendant de en le contenu.

je veux daraus une universelle Dummy-Funktion pour OLE-Interfaces bricoler (était oui bien sûr )
malheureusement klappt plan le reste pas, wahrscheinlich weil justement là mon Berechnung qui Rücksprungadresse/Parameterzahl pas stimmt. mais cela kriege je raus...

merci pour deine Aider!

PS: si du ca liest hat cela Posting geklappt

SeeYou
Pascal
 
07.11.2010  
 



Juhu ^ ^

Stumpf dit reichts scheinbar si am Funktionkopf
steht um den Stack pour ret 0 trop präparieren chez égal comment vielen Params.
 
07.11.2010  
 




Uwe
''Pascal''
Niemeier
Nachtrag @ iF:

Trotz deiner Solution werde je cet technologie wohl pas verwenden peut
Anscheinend peux es vorkommen, qui qui Aufrufer ( dans mon cas Windows selbst, cela qui Methoden meines Interfaces aufruft ) avant dem Funktionsaufruf Werte pour den Eigenbedarf sur den Stack pusht, qui gar pas comme paramètre pour qui Funktion vorgesehen sommes.
et avec cela ist qui Parameterberechnung par ebp minus esp  hinfällig
alors ist es weiterhin nötig, pour chacun Parameterzahl une eigene Dummy-Funktion bereitzustellen. mais den Versuch war's wert!

SeeYou
Pascal
 
10.11.2010  
 



Sorry, là habe je ad hoc aussi aucun concept - besonders si le Aufruferfunktion aussi avec dem Stack werkelt.

je pourrait mir encore présenter cela "Win" qui Differenz dans solch le cas dans einem Register mitliefert ou bien per Stack - là une dépendance herauszufummeln ist mais bestimmt assez "irre".
 
10.11.2010  
 



quoique...

si Du la fois lauter Longs vom Stack simple frech dans une Debugviewer puschst ...

vlt. klappts oui si on plus que seulement 1 Long zurücksichert.
 
10.11.2010  
 




Uwe
''Pascal''
Niemeier
Hi iF!

je crois inzwischen pas plus, qui cela Ganze machbar ist:
chacun Methode hat eh bien la fois une feste Anzahl paramètre, et derjenige, qui qui Methoden bereitstellt (et tout autor ca va oui), hat plan pour Sorge trop tragen, qui cet paramètre korrekt bearbeitet volonté. pourquoi sollte sich M$ qui Mühe faire, cet Anzahl irgendwo einzubauen? et si, wäre es plan undokumentiert et avec cela seeeehr wackelig...L'idée avec qui MultiParameter-Methode ist oui sur meinem Mist gewachsen
Aussi hält sich qui Aufwand chez qui bisherigen technologie aussi dans Grenzen; ici une Version des OLE-RTF-Controls:
window 800,600
 $H Windows.ph
 $H RichEdit.ph
usermessages 16'--WM_CLOSE
def StgCreateDocfileOnILockBytes(4) !"ole32","StgCreateDocfileOnILockBytes"
def CreateILockBytesOnHGlobal(3) !"ole32","CreateILockBytesOnHGlobal"
def &NI $80004001'--Not Implemented
def &OK 0'----------OK

proc CreateIMD'---------------------------------------InterfaceMethodDummy

    var a&=~GlobalAlloc(0,8)
    byte a&,0=$B8'-------mov eax,&(2)
    long a&,1=&(2)'------Rückgabe: vorgegebene Konstante
    byte a&,5=$C2'-------ret &(1)*4+4
    word a&,6=&(1)*4+4'--Anzahl paramètre * 4 + "This"-Pointer
    return a&'-----------Fertige Funktion im grenier
    '--PS: avec un paire NOP's zum Déplacer qui Platzhalter paßt alles dans 1 la ligne avec 4 LongInts

endproc'------------------------------------------------------------------

proc GetNewStorage'------------------------------------------GetNewStorage

    parameters IFace&,IStorage&
    declare ILockBytes&
    CreateILockBytesOnHGlobal(0,1,addr(ILockBytes&))
    StgCreateDocfileOnILockBytes(ILockBytes&,$1012,0,IStorage&)
    call(long(long(ILockBytes&,0),8),ILockBytes&)'--ILockBytes::Release
    return &OK

endproc'------------------------------------------------------------------

declare VTable#:dim VTable#,60'-----------------------IRichEditOleCallback-Interface
long VTable#, 0=CreateIMD(1,&NI)'-------------QueryInterface
long VTable#, 4=CreateIMD(0,&NI)'-------------AddRef
long VTable#, 8=CreateIMD(0,&NI)'-------------Release
long VTable#,12=procaddr("GetNewStorage",2)'--GetNewStorage
long VTable#,16=CreateIMD(3,&NI)'-------------GetInPlaceContext
long VTable#,20=CreateIMD(1,&NI)'-------------ShowContainerUI
long VTable#,24=CreateIMD(3,&OK)'-------------QueryInsertObject
long VTable#,28=CreateIMD(1,&NI)'-------------DeleteObject
long VTable#,32=CreateIMD(5,&OK)'-------------QueryAcceptData
long VTable#,36=CreateIMD(1,&NI)'-------------ContextSensitiveHelp
long VTable#,40=CreateIMD(3,&NI)'-------------GetClipboardData
long VTable#,44=CreateIMD(3,&NI)'-------------GetDragDropEffect
long VTable#,48=CreateIMD(4,&NI)'-------------GetContextMenu
long VTable#,52=VTable#
var IFace&=VTable#+52
var Edit&=create("richedit",%hwnd,»,20,20,500,500)
sendmessage(Edit&,~EM_SETOLECALLBACK,0,IFace&)'---EM_SETOLECALLBACK
var Dossier$=loadfile$("RTF avec Objekten wählen","*.rtf")
Rtf("LoadRTF",Edit&,Dossier$)

tandis que 1

    waitinput
    cas %umessage=16:pause

endwhile

sendmessage(Edit&,~EM_SETOLECALLBACK,0,0)
destroywindow(Edit&)
dispose VTable#
'--ici müßten eigendlich alle Methoden-Dummys avec ~GlobalFree() freigegeben volonté

était mais bien, la fois wieder un peu ASM trop üben

SeeYou
Pascal
 
12.11.2010  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

8.985 Views

Untitledvor 0 min.
Jens-Arne Reumschüssel06.01.2024
funkheld30.12.2021
RudiB.13.11.2021
p.specht27.05.2020
plus...

Themeninformationen

cet Thema hat 2 participant:

iF (5x)
Uwe ''Pascal'' Niemeier (4x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie