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 - Usuario887

#221
Windows / Re: AWE y Windows
20 Febrero 2021, 22:10 PM
Gracias por tu respuesta.
Saludos.
#222
Cita de: Eternal Idol en 20 Febrero 2021, 21:51 PM
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

Muchas gracias por tu atencion.
Realmente llevaba bastante tiempo buscando una forma comoda de hacer esto.

Saludos.
#223
Cita de: Eternal Idol en 20 Febrero 2021, 21:26 PM
https://foro.elhacker.net/programacion_cc/eliminar_basura_de_los_exes_compilados_en_c-t299411.0.html

Citar   #define _WIN32_WINNT 0x0403
  #define WIN32_LEAN_AND_MEAN
  #pragma optimize("gsy", on)
  #pragma comment(linker,"/RELEASE")
  #pragma comment(linker, "/IGNORE:4108")
  #pragma comment(linker, "/FIXED")
  #pragma comment(linker, "/STUB:stub.exe")
  #pragma comment(linker, "/MERGE:.rdata=.data")
  //#pragma comment(linker, "/MERGE:.reloc=.data")
  #pragma comment(linker, "/MERGE:.text=.data")
  #pragma comment(linker, "/NODEFAULTLIB")
  #pragma comment(linker, "/ENTRY:DllMain")
  #pragma comment(linker, "/FILEALIGN:16")
  #pragma comment(linker, "/ALIGN:16")
  #pragma pack(1)

¿Me explicarias que exactamente esta pasando aqui con el linker? ¿Que es "gsy"?




¿Por que en el primer programa la libreria se supone estatica y en el segundo dinamica? ¿Cada vez que declaro ID proto C, ... el ensamblador añade un GetProcAddress o algo asi?
#224
En HLLs el compilador se encarga de procesar los calculos necesarios para el uso de variables en la pila, ademas de ocasionar la localidad entre las variables declaradas.

¿Existe alguna forma de hacer esto en ensamblador? Una tecnica, o algo asi...

Lo unico que se me ocurre es:

Código (asm) [Seleccionar]
mov ebp, esp
push eax ;a partir de ahora existe una variable en SS:EBP+ESP+4


¿Hay alguna otra forma que "Memorizando" las posiciones de memoria?

(Eso lo he aprendido desensamblado .COMs con DEBUG.EXE. Si existe una tecnica mas moderna agradeceria una pequeña explicacion o una referencia)

Saludos.
#225
¿Existe alguna forma de expresar los caracteres de C:

\r \n \a \t \b \0 \x...

En ensamblador con la misma simpleza, o deben ser expresados esecificamente a traves del valor ASCII?

Lei en Stack Overflow que depende del ensamblador... En este caso hablamos de MASM32.

Gracias de antemano.
Saludos.
#226
Cita de: Eternal Idol en 20 Febrero 2021, 20:02 PM
La mayoria de la RTL de C en Windows termina llamando a la API del mismo

Claro... Es la unica forma en que puede llegar a los dispositivos... Bueno, creo que seria mas "Oportuno" que me dedique a aprender la API de Windows. Al final probablemente me termine siendo mas util que conocer solo la libreria de C.

Gracias por tu atencion.
Saludos.
#227
Cita de: Eternal Idol en 20 Febrero 2021, 19:49 PM
El primero tiene la RTL de C completa enlazada estaticamente dentro del ejecutable

Eso no me lo imagine...

Gracias por tu respuesta.
Saludos.
#228
¡Bienvenido!

Me parece haberte leido por el 2016... Para entonces estaba en el foro aunque con otro perfil. Me llamaba MRx86.

Siempre leo temas antiguos... usuarios como Randomize o YST tuvieron mucho que aportar; es interesante leerlos.

Saludos.
#229
Perdonen la trivialidad... pero un programa en C, por ejemplo, el siguiente:


#include <stdio.h>

int main()
{
   printf ("Im the output.");
    getchar ();

   return 0;
}


y creo que imposiblemente mas exactamente el mismo programa, pero en ensamblador:

Código (asm) [Seleccionar]

.686
.model FLAT

includelib \masm32\lib\msvcrt.lib

printf proto C, :dword
getchar proto C
exit proto C, :dword

   .data?
   dd ?
   
   .data
     __0 db "Im the output.", 0

 .code

start:
 
   call main
   invoke exit, 0

main proc
   invoke printf, offset __0
   invoke getchar

   ret

main endp
end start


Producen una salida con una diferencia de ciento veintinueve mil seiscientos cuarenta y dos (129 642) bytes ¡Eso seria un 85.40% mayor, para el mismo algoritmo! ¡Que locura!

¿Por que existe esta diferencia tan abismal?
¿Es la diferencia siempre de este tamaño en terminos porcentuales, o la diferencia existe hasta cierto punto?

Saludos.
#230
Hola,

El primer lenguaje que aprendi fue C y hasta ahora sigue siendo el unico que utilizo. Despues de unos meses estudiando MASM comienzo a experimentar con el; especificamente MASM32. Hasta ahora la unica libreria que he utilizado (en general) ha sido msvcrt.lib (Notese mi relacion con C). Siento que estoy en las mismas, y me surgen las preguntas:

¿Deberia estudiar la libreria "Estandar" de MASM32 (masm32rt.inc)?
¿Deberia mas bien estudiar las APIs de Windows para trabajar con ellas directamente?
¿Me basta utilizar la libreria de C?

Por cierto... ¿Alguien  sabe que siginfica el acronimo MSVCRT?

Saludos y gracias de antemano.