| 
	
		|  Autor | Tema: Enlazando asm con C para driver  (Leído 3,714 veces) |  
	| 
			| 
					
						| x64core 
								       
								
								 Desconectado 
								Mensajes: 1.908
								
								
								
								
								
								   | 
 
Buenas a todos, me gustaria saber como enlazar funciones creadas en asm ( con masm32 ) para un driver hecho en C, intente hacerlo así: extern "C"{unsigned long MyTest (  unsigned long Param1, unsigned long Param2);
 }
intente primero sin "C" luego se lo agrege, pero me da error para a la hora de compilarlo   1>C:\header1.h(3) : error C2059: syntax error : 'string'1>C:\drvmain.c(16) : error C4013: 'MyTest' undefined; assuming extern returning int
ED: mi .asm: .386.model flat, c
 
 DbgPrint PROTO stdcall, :DWORD, :VARARG
 MyTest PROTO stdcall, :DWORD, :DWORD
 
 .data
 string1 db "ASM",0
 .code
 MyTest proc Param1:DWORD , Param2:DWORD
 invoke DbgPrint, offset string1
 mov eax, 0
 ret
 MyTest endp
 end
en el .c solo hago una llamada a la funcion  Bueno ya intente incluir el .asm en el SOURCES y hacer build /Z pero me da error 
 
 |  
						| 
								|  |  
								| « Última modificación: 19 Junio 2012, 05:20 am por RHL » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Eternal Idol 
								Kernel coder ajeno al tiempo 
								Moderador
								      Desconectado 
								Mensajes: 5.970
								
								 
								Israel nunca torturó niños, ni lo volverá a hacer.
								
								
								
								
								
								     | 
 
¿Y cual era el problema sin "C"? El "C" es para C++ y tu archivo es .c ... pone la convencion de llamada: extern unsigned long __stdcall MyTest (unsigned long Param1, unsigned long Param2);
 Tendras que exportar el simbolo como _MyTest@8 ... segui probando ya que esto practicamente solo es util para hacer pruebas.
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.Juan Domingo Perón
 |  |  |  | 
			| 
					
						| 0xDani 
								       
								
								 Desconectado 
								Mensajes: 1.077
								
								   | 
 
Eh como se enlaza asm con C? |  
						| 
								|  |  
								|  |  En línea | 
 
 I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
 I code for $$$
 Hago trabajos en C/C++
 Contactar por PM
 |  |  |  | 
			| 
					
						| Eternal Idol 
								Kernel coder ajeno al tiempo 
								Moderador
								      Desconectado 
								Mensajes: 5.970
								
								 
								Israel nunca torturó niños, ni lo volverá a hacer.
								
								
								
								
								
								     | 
 
Pasandole al enlazador el codigo objeto generado (o una libreria) pero en el 99.9% de los casos no es necesario usar assembly. |  
						| 
								|  |  
								|  |  En línea | 
 
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.Juan Domingo Perón
 |  |  |  | 
			| 
					
						| 0xDani 
								       
								
								 Desconectado 
								Mensajes: 1.077
								
								   | 
 
Y que se puede hacer con asm? Es muy util? Es que estoy considerando meterme en otro lenguaje. |  
						| 
								|  |  
								|  |  En línea | 
 
 I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
 I code for $$$
 Hago trabajos en C/C++
 Contactar por PM
 |  |  |  | 
			| 
					
						| Eternal Idol 
								Kernel coder ajeno al tiempo 
								Moderador
								      Desconectado 
								Mensajes: 5.970
								
								 
								Israel nunca torturó niños, ni lo volverá a hacer.
								
								
								
								
								
								     | 
 
Y que se puede hacer con asm? Es muy util? Es que estoy considerando meterme en otro lenguaje.
 Se puede hacer cualquier cosa pero no es un lenguaje portable como C o C++. PD. No secuestres hilos ajenos con otras preguntas. |  
						| 
								|  |  
								|  |  En línea | 
 
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.Juan Domingo Perón
 |  |  |  | 
			| 
					
						| x64core 
								       
								
								 Desconectado 
								Mensajes: 1.908
								
								
								
								
								
								   | 
 
¿Y cual era el problema sin "C"? El "C" es para C++ y tu archivo es .c ... pone la convencion de llamada: extern unsigned long __stdcall MyTest (unsigned long Param1, unsigned long Param2);
 Tendras que exportar el simbolo como _MyTest@8 ... segui probando ya que esto practicamente solo es util para hacer pruebas.crei que lo habias hecho    ahora solo tengo un error:  drvmain.obj : error LNK2019: unresolved external symbol _MyTest@0 referenced in function _DriverEntry@8creo que hay algo malo en el asm   modifique el asm como loco, por ahora lo tengo así: .386.model flat, C
 
 public MyTest
 
 MyTest PROTO
 
 .code
 
 MyTest proc public
 push eax
 push edx
 mov eax,50
 mov edx,100
 add eax,edx
 ret
 MyTest endp
 end
PD. por cierto desinclui el .h creo que es lo mismo si pongo la declaracion extern en el .c ...  de todos modos me daba error en el .h cuando escribia: extern {    unsigned long __stdcall MyTest(); } error: hd1.h(2) : error C2059: syntax error : '{' quite los {, } y me da el primer error que muestro |  
						| 
								|  |  
								| « Última modificación: 19 Junio 2012, 22:08 pm por RHL » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Eternal Idol 
								Kernel coder ajeno al tiempo 
								Moderador
								      Desconectado 
								Mensajes: 5.970
								
								 
								Israel nunca torturó niños, ni lo volverá a hacer.
								
								
								
								
								
								     | 
 
crei que lo habias hecho  Si, hace años, incluso mi primer modulo de modo Kernel lo escribi en assembly pero para APRENDER y la mejor manera de aprender es probando y leyendo hasta dar con la solucion. ahora solo tengo un error:  drvmain.obj : error LNK2019: unresolved external symbol _MyTest@0 referenced in function _DriverEntry@8No encuentra el simbolo, tenes que hacer que coincidan exactamente (podes verlos con DUMPBIN). |  
						| 
								|  |  
								|  |  En línea | 
 
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.Juan Domingo Perón
 |  |  |  | 
			| 
					
						| x64core 
								       
								
								 Desconectado 
								Mensajes: 1.908
								
								
								
								
								
								   | 
 
Si, hace años, incluso mi primer modulo de modo Kernel lo escribi en assembly pero para APRENDER y la mejor manera de aprender es probando y leyendo hasta dar con la solucion.
 No encuentra el simbolo, tenes que hacer que coincidan exactamente (podes verlos con DUMPBIN).
 
 si, MI ERROR! mie**! estab ocupando el notepad para escribir asm! y era PROTO no proto!!!!  gracias Eternal , por cierto eso hice tambien mire el .obj |  
						| 
								|  |  
								| « Última modificación: 19 Junio 2012, 22:29 pm por RHL » |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Necesito ayuda para DRIVER PARA TARJETA ATHEROS AR8132 para Backtrack4 Wireless en Linux
 | Califor90 | 0 | 4,585 |  23 Octubre 2010, 19:00 pm por Califor90
 |  
						|   |   | Ayuda: Problema enlazando varios archivos Fuentes y cabeceras
							« 1 2 » Programación C/C++
 | x64core | 14 | 8,923 |  15 Marzo 2012, 21:59 pm por Eternal Idol
 |  
						|   |   | Enlazando propiedades con Eval en vez de Bind .NET (C#, VB.NET, ASP)
 | DanteInfernum | 0 | 1,778 |  27 Febrero 2014, 18:26 pm por DanteInfernum
 |  
						|   |   | [AYUDA] Problemas enlazando a SDL Programación C/C++
 | Almamu | 0 | 2,013 |  16 Enero 2015, 17:17 pm por Almamu
 |    |