FASM (Windows x32 API / Win32API) Tutorial, "Olá, mundo!"

Resumidamente sobre FASM, assembler, WinAPI

  • O que é FASM? - Este é um compilador assembler (flat assembler).





  • O que é assembler? - são instruções de máquina, ou seja, comandos o que fazer com o processador.





  • O que é Windows API / WinAPI? - Estas são funções do Windows, sem elas você não pode trabalhar com o Windows.





    O que as funções WinAPI fazem? - Muitas coisas:





  • Trabalhando com arquivos.





  • Trabalhar com janelas, desenhar imagens, OpenGL, DirectX, GDI e assim por diante.





  • Interação com outros processos.





  • Trabalhando com portas.





  • Trabalhando com o console do Windows





  • E muitos outros recursos interessantes.





Por que você precisa de um montador?

Você pode fazer qualquer coisa nele, desde o sistema operacional até jogos 3D.





Aqui estão os prós do montador:





  • Ele é muito rápido.





  • .





:





  • . ()





  • .





(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 é o nome da função que será carregada da DLL, ou seja, este é o nome da função que está gravada na DLL.





Além disso, acho que não vale a pena explicar, tudo parece estar claro.





O que é uma biblioteca DLL?

É um arquivo com extensão DLL. Este arquivo contém funções (qualquer que seja). Este é um programa comum, mas que não é iniciado com um clique duplo, mas é carregado no programa na memória virtual, e então as funções localizadas nesta DLL são chamadas.





Resumindo

Você pode escrever em assembler sem conhecer a linguagem em si, mas usando apenas comandos macro do compilador. Para todo o artigo, mencionei apenas 2 comandos assembler this push hello



e call [printf]



. Eu direi o que isso significa no próximo artigo.








All Articles