¿Es posible generar funciones en lenguaje ensamblador a partir de funciones C usando GCC, para que puedan ser invocadas desde un programa en lenguaje ensamblador? Sé que gcc compila C en código de máquina (que se puede desmontar fácilmente en lenguaje ensamblador), y ya sé que es posible incorporar funciones de lenguaje ensamblador en C, pero aún no he encontrado una manera de invocar funciones C desde ensamblador programas de idiomas, que es básicamente lo contrario de esto.
Aquí, intento incorporar una función C en un programa ensamblador x86. Si la inserción no es posible, ¿hay alguna otra forma de invocar una función C desde un programa en lenguaje ensamblador?
.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
No recuerdo todos los detalles, pero solo necesita compilar en archivos de objetos y vincularlos. Solo necesita saber qué convenciones de llamada se utilizan al invocar la función.
–Jeff Mercado
27 de abril de 2013 a las 18:44
Puede agregar el código ensamblador que muestra lo que ha intentado y decir cómo falla al compilar o cómo se comporta mal. Sería mucho más fácil para una respuesta señalar cuál es el problema.
– hyde
27 de abril de 2013 a las 18:47
Puede aprender cómo hacer esto escribiendo una función C que llame a la función que desea llamar, compilándola en lenguaje ensamblador (
-S
), y estudiando los resultados. También te señalaría el “psABI”, pero ya no puedo encontrar una copia.– zwol
27 de abril de 2013 a las 18:59
Por supuesto que puedes hacer esto. Simplemente siga las reglas de la ABI de su compilador.
–David Heffernan
27/04/2013 a las 19:10