Tutorial de FASM (Windows x32 API / Win32API), "¡Hola, mundo!"

Brevemente sobre FASM, ensamblador, WinAPI

  • ¿Qué es FASM? - Este es un compilador ensamblador (ensamblador plano).





  • ¿Qué es ensamblador? - estas son instrucciones de la máquina, es decir, comandos qué hacer con el procesador.





  • ¿Qué es la API de Windows / WinAPI? - Estas son funciones de Windows, sin ellas no puede trabajar con Windows.





    ¿Qué hacen las funciones de WinAPI? - Un montón de cosas:





  • Trabajar con archivos.





  • Trabajar con ventanas, dibujar imágenes, OpenGL, DirectX, GDI, etc.





  • Interacción con otros procesos.





  • Trabajando con puertos.





  • Trabajar con la consola de Windows





  • Y muchas más características interesantes.





¿Por qué necesitas un ensamblador?

Puedes hacer cualquier cosa con él, desde SO hasta juegos 3D.





Aquí están las ventajas del ensamblador:





  • Es muy rapido.





  • .





:





  • . ()





  • .





(FASM)?

  • FASM - https://flatassembler.net/





  • FASM Editor 2.0 - IDE FASM, fasmworld.ru (asmworld), : https://fasmworld.ru/content/files/tools/FEditor-v2.0.rar





  • OlyDbg - ollydbg.de: https://www.ollydbg.de/odbg201.zip





    8.5MB.





( )

FASM- C:\\FASM\ , FASMEditor.





FASMEdit-a -, C:\\FASM Editor 2.0\





OlyDbg -, C:\\Users\****\Documents\FasmEditorProjects\





FASM Editor-a

.





FASM Editor .





"" ( ) -> "..."





"..." .





. .





"Hello world!" FASM

Fasm Editor "" -> "". , "Console"





, .





format PE Console ;   FASM   

entry start ;  windows-      .

include 'win32a.inc' ;   FASM-
;       .

section '.data' data readable writeable ;  

	hello db 'hello world!',0 ;     

section '.code' code readable writeable executable ;  

start: ;  
	invoke printf, hello ;   printf
  
  invoke getch ;        
  ;    .
  
  invoke ExitProcess, 0 ;  windows-     
  ;      ()

section '.idata' data import readable ;  
        library kernel, 'kernel32.dll',\ ;   ,   
                msvcrt, 'msvcrt.dll'
  
  import kernel,\
  				ExitProcess, 'ExitProcess'
          
  import msvcrt,\
  				printf, 'printf',\
          getch, '_getch'
      
      



, 3: 16, 18, 21 . ( , . )





.





:





2. ( 1, )





: ?

1 : "format PE Console" - FASM- , 1 , ( ).





PE - EXE , .





Console - , .





:





  • format MZ - EXE- MS-DOS





  • format PE - EXE- Windows, format PE GUI 4.0





  • format PE64 - EXE- Windows, 64 .





  • format PE GUI 4.0 - EXE- Windows, .





  • format PE Console - EXE- Windows, . ( )





  • format PE Native -





  • format PE DLL - DLL- Windows, .





  • format COFF - OBJ- Linux





  • format MS COFF -





  • format ELF - OBJ- gcc (Linux)





  • format ELF64 - OBJ- gcc (Linux), 64-bit





( ) format PE Console



;



. .





3 : entry start







  • windows- \ . "start" , .





5 : include 'win32a.inc'







  • , "win32a.inc" INCLUDE ( FASM). .





8 : section '.data' data readable writeable







  • , (), , .





"data" ( \\ - ) .





"readable writeable" - -.





'.data' -





10 : hello db 'hello world!',0







hello - , (, ), , , , , FASM , .





db - 1 . 1 .





'hello world!' - ASCII





",0" ? - 0 ( ), 0, . . .





12 : section '.code' code readable writeable executable







"code" - .





"executable" - , .





.





14 : start:







. . 3 start , . , entry







15 : invoke printf, hello







  • printf - \ . "hello"





, , .





- , - .





, invoke : ( 15 )





push hello
call [printf]
      
      



.





17 : invoke getch







  • getch - , .





20 : invoke ExitProcess, 0







  • ExitProcess - WinAPI , . , , , .





23 : section '.idata' data import readable







"import" - .





24-25 :





library kernel, 'kernel32.dll',\
  				msvcrt, 'msvcrt.dll'
      
      



  • "library" DLL ( , ).





DLL .





kernel - , .





: 'kernel32.dll'



- DLL .





\



.





:





library kernel, 'kernel32.dll',\
  				msvcrt, 'msvcrt.dll'
      
      



:





library kernel, 'kernel32.dll', msvcrt, 'msvcrt.dll'
      
      



1 1 .





27-28 :





import kernel,\
  			ExitProcess, 'ExitProcess'
      
      



import



- , DLL.





kernel



- DLL, .





ExitProcess



- , , . (WinAPI )





'ExitProcess'



- Este es el nombre de la función que se cargará desde la DLL, es decir, este es el nombre de la función que está escrita en la DLL.





Además creo que no vale la pena explicarlo, todo parece estar claro.





¿Qué es una biblioteca DLL?

Es un archivo con extensión DLL. Este archivo contiene funciones (lo que sea). Este es un programa normal, pero que no se inicia con un doble clic, sino que se carga en el programa en la memoria virtual y luego se llaman las funciones ubicadas en esta DLL.





Resumiendo

Puede escribir en ensamblador sin conocer el lenguaje en sí, pero usando solo comandos macro del compilador. Para todo el artículo, mencioné solo 2 comandos de ensamblador: este push hello



y call [printf]



. Te diré lo que esto significa en el próximo artículo.








All Articles