Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Usuario887 en 28 Febrero 2021, 01:03 am



Título: Simbolo no resuelto por el linker.
Publicado por: Usuario887 en 28 Febrero 2021, 01:03 am
Hola.

Estaba buscando una forma de obtener la linea de comandos desde un programa escrito para MASM con la funcion GetCommandLineA de kernel32.lib, pero el linker no resuelve el simbolo:

Citar
POLINK: error: Unresolved external symbol '_GetCommandLineA'.

Lei sobre las convenciones de llamada en un articulo mencionado por @Eternal Idol: http://unixwiz.net/techtips/win32-callconv.html#decor (http://unixwiz.net/techtips/win32-callconv.html#decor) pero la verdad no estoy seguro de en que esta afectando esto aqui.

El codigo:

Código
  1. .686p
  2. .model flat, stdcall
  3.  
  4. includelib \masm32\lib\msvcrt.lib
  5. includelib \masm32\lib\kernel32.lib
  6.  
  7. printf proto C, :dword
  8. exit proto C, :dword
  9.  
  10. extern stdcall GetCommandLineA: proc
  11.  
  12. t macro i:vararg
  13. local s
  14. const segment
  15. s db i, 0
  16. const ends
  17. exitm <offset s>
  18. endm
  19.  
  20. .data?
  21. db ?
  22.  
  23. .data
  24. db ?
  25.  
  26. .code
  27.  
  28. start:
  29. call main
  30. invoke exit, 0h
  31.  
  32. main proc
  33.  
  34. call GetCommandLineA
  35.  
  36. ret
  37. main endp
  38.  
  39. end start


Título: Re: Simbolo no resuelto por el linker.
Publicado por: Eternal Idol en 28 Febrero 2021, 01:20 am
Código
  1. extern stdcall GetCommandLineA@0: proc
  2. ...
  3. call GetCommandLineA@0
  4.  


Título: Re: Simbolo no resuelto por el linker.
Publicado por: Usuario887 en 28 Febrero 2021, 14:17 pm
No puede ser... eso habia intentado pero con proto e invoke. ¿Por que no funciona con proto e invoke?

Código
  1. GetCommandLineA@0 proto stdcall

Citar
POLINK: error: Unresolved external symbol '_GetCommandLineA@0@0'.



Título: Re: Simbolo no resuelto por el linker.
Publicado por: Eternal Idol en 28 Febrero 2021, 17:49 pm
Pero lo es, con PROTO e INVOKE no hace falta explicitar el decorado.


Código
  1. GetCommandLineA PROTO STDCALL
  2. ...
  3. invoke GetCommandLineA


Título: Re: Simbolo no resuelto por el linker.
Publicado por: Usuario887 en 28 Febrero 2021, 19:35 pm
Pues tienes razon... me estoy acordando de los tropiezos de aprender una nueva forma de programacion.

Gracias por tu ayuda y atencion.
Saludos.


Título: Re: Simbolo no resuelto por el linker.
Publicado por: Eternal Idol en 28 Febrero 2021, 22:05 pm
De nada  ::)