È possibile generare funzioni linguaggio assembly dalle funzioni C tramite GCC, in modo che possano essere richiamate da un programma in linguaggio assembly? So che gcc compila il codice da computer C (che può essere facilmente smontato in linguaggio assembly), e so già che è possibile effettuare il inline assembly language functions in C, ma non ho ancora trovato un modo per richiamare le funzioni C dai programmi in linguaggio assembly, che è fondamentalmente l'inverso di questo.Chiamare funzioni C da linguaggio assembly x86
Qui, sto tentando di incorporare una funzione C in un programma di assemblaggio x86. Se l'inlining non è possibile, c'è un altro modo per invocare una funzione C da un programma in linguaggio assembly?
.686p
.model flat,stdcall
.stack 2048
.data
.code
start:
invoke ExitProcess, 0
printSomething PROC ;now I'm attempting to inline a C function here
void printSomething(thingToPrint){
printf("This is a C function that I want to invoke from an assembly language program.");
printf("There must be some way to do this - is it possible somehow?");
}
printSomething ENDP
end start
Non ricordo tutti i dettagli, ma è sufficiente compilare i file oggetto e collegarli tra loro. Hai solo bisogno di sapere quali convenzioni di chiamata vengono utilizzate quando si richiama la funzione. –
È possibile aggiungere il codice assembly che mostra ciò che si è provato e indicare come non riesce a compilare o come si comporta male. Sarebbe molto più facile per una risposta indicare il problema. – hyde
Puoi imparare come farlo scrivendo una funzione C che chiama la funzione che vuoi chiamare, la compila in linguaggio assembly ('-S'), e studia i risultati. Ti indicherò anche "psABI", ma non riesco più a trovare una copia. – zwol