Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eternal Idol

#261
https://docs.microsoft.com/en-us/cpp/assembler/masm/proto?view=msvc-160

El nombre, el numero de parametros y la convencion de llamada. Lo mismo de antes pero sin usar PROTO/invoke:

Código (asm) [Seleccionar]
includelib user32.lib
...
EXTERN stdcall MessageBoxA@16 : PROC
...
push 0
push offset caption
push offset msg
push 0
call MessageBoxA@16


En STDCALL el codigo llamado se ocupa de acomodar la pila, en C es lo contrario y cuando usas invoke con funciones de C ademas de empujar los parametros invoke se ocupa tambien de acomodar la pila.

Ejemplo:
 00000022: 68 00 00 00 00     push        offset __0
 00000027: E8 00 00 00 00     call        _printf
 0000002C: 83 C4 04           add         esp,4
#262
De manera analoga a las funciones de la RTL de C, se declara el PROTO (el 99% son STDCALL) con el nombre de la funcion y sus parametros y despues se puede usar invoke.


https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox

Código (asm) [Seleccionar]
includelib user32.lib

MessageBoxA PROTO stdcall, :DWORD, :DWORD, :DWORD, :DWORD

...
.data
msg db "HOLA", 0
caption db "PRUEBA", 0    
...
main proc
   
invoke MessageBoxA, 0, offset msg, offset caption, 0


Este trabajo de los PROTO viene ya hecho con MASM32 incluyendo si recuerdo bien windows.inc, ya hace varios años que no uso MASM32.


Es insostenible tener que mantener binarios para varias plataformas (x86, x64 y ahora viene ARM64 a toda maquina), es sin lugar a dudas mas duro escribir lo mismo sin tener las facilidades de la programacion orientada a objetos y/o generica. Programadores para un proyecto profesional que sean capaces de crear y mantenerlo en ensamblador ... en una empresa grande de software tal vez y con suerte tengas un par. No vale la pena el esfuerzo de escribir un proyecto entero en ensamblador, si es muy util para depurar y comprender problemas complejos que con solo saber C/C++ seran dificiles de solucionar. Si vale la pena aprenderlo y hacer proyectos puntuales, prototipos, depurar, etc. pero no me meteria en nada serio mas alla de un modulo .asm dentro de un proyecto en C/C++ cuando no hay mas remedio (solo lo necesite una  vez en casi 18 años de carrera).
#263
[youtube=640,360]https://www.youtube.com/watch?v=nn2FB1P_Mn8[/youtube]

;D

A todo el mundo le funciona ...



Si, al enlazar una libreria estatica (.LIB de codigo) el primer programa contiene todo el codigo de la RTL en su ejecutable, el segundo simplemente enlaza dinamicamente la DLL (con un .LIB de importacion).

#265
Ese pragma es para el compilador:
https://docs.microsoft.com/en-us/cpp/preprocessor/optimize?view=msvc-160

Por el tamaño pero depende de la configuracion del proyecto y lo que termine por pasar en linea de comandos:
https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=msvc-160

Si probaras la que te deje verias la diferencia usando el mismo codigo fuente:
cl /O1 /MD hello.cpp




No, pero tu ejecutable tiene por cada uno de los PROTO un funcion importada. Compara los 2 ejecutables con https://www.dependencywalker.com/

PD. GetProcAddress seria enlace dinamico en tiempo de ejecucion y la otra en tiempo de carga (esta en el PE el enlace en si mismo):
https://docs.microsoft.com/en-us/windows/win32/dlls/using-run-time-dynamic-linking
#266
En MASM podes usar PROC y LOCAL para eso.

In the second directive, within a procedure definition (PROC), LOCAL creates stack-based variables that exist for the duration of the procedure. The labelId may be a simple variable or an array containing count elements, where count is a constant expression.

https://docs.microsoft.com/en-us/cpp/assembler/masm/local-masm?view=msvc-160
https://docs.microsoft.com/en-us/cpp/assembler/masm/proc?view=msvc-160
#268
Si y ademas esa API la podras usar desde C/C++ tambien.
#269
No conozco otra forma:

Código (asm) [Seleccionar]
blabla db "HOLA", 13, 10, 0
#270
La mayoria de la RTL de C en Windows termina llamando a la API del mismo (y lo mismo con cualquier S.O. y sus servicios, no queda otra), fopen llama a CreateFile* por ejemplo.

Microsoft Visual C Run Time.