elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Enlazando asm con C para driver
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Enlazando asm con C para driver  (Leído 3,398 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Enlazando asm con C para driver
« en: 19 Junio 2012, 03:46 am »

Buenas a todos, me gustaria saber como enlazar funciones creadas en asm ( con masm32 ) para un driver hecho en C, intente hacerlo así:

Código:
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 :P


Código:
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:


Código:
.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
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Enlazando asm con C para driver
« Respuesta #1 en: 19 Junio 2012, 13:15 pm »

¿Y cual era el problema sin "C"? El "C" es para C++ y tu archivo es .c ... pone la convencion de llamada:

Código
  1. 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 Desconectado

Mensajes: 1.077



Ver Perfil
Re: Enlazando asm con C para driver
« Respuesta #2 en: 19 Junio 2012, 17:14 pm »

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
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Enlazando asm con C para driver
« Respuesta #3 en: 19 Junio 2012, 17:41 pm »

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 Desconectado

Mensajes: 1.077



Ver Perfil
Re: Enlazando asm con C para driver
« Respuesta #4 en: 19 Junio 2012, 18:32 pm »

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
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Enlazando asm con C para driver
« Respuesta #5 en: 19 Junio 2012, 21:26 pm »

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 Desconectado

Mensajes: 1.908


Ver Perfil
Re: Enlazando asm con C para driver
« Respuesta #6 en: 19 Junio 2012, 21:57 pm »

¿Y cual era el problema sin "C"? El "C" es para C++ y tu archivo es .c ... pone la convencion de llamada:

Código
  1. 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 :P
ahora solo tengo un error:
Código:
drvmain.obj : error LNK2019: unresolved external symbol _MyTest@0 referenced in function _DriverEntry@8

creo que hay algo malo en el asm :P
modifique el asm como loco, por ahora lo tengo así:
Código:
.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
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Enlazando asm con C para driver
« Respuesta #7 en: 19 Junio 2012, 22:20 pm »

crei que lo habias hecho :P

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:
Código:
drvmain.obj : error LNK2019: unresolved external symbol _MyTest@0 referenced in function _DriverEntry@8

No 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 Desconectado

Mensajes: 1.908


Ver Perfil
Re: Enlazando asm con C para driver
« Respuesta #8 en: 19 Junio 2012, 22:28 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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,203 Último mensaje 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,094 Último mensaje 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,632 Último mensaje 27 Febrero 2014, 18:26 pm
por DanteInfernum
[AYUDA] Problemas enlazando a SDL
Programación C/C++
Almamu 0 1,770 Último mensaje 16 Enero 2015, 17:17 pm
por Almamu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines