Tutorial FASM (Windows x32 API / Win32API), "Halo dunia!"

Secara singkat tentang FASM, assembler, WinAPI

  • Apa itu FASM? - Ini adalah compiler assembler (assembler datar).





  • Apa itu assembler? - ini adalah instruksi mesin, yaitu perintah apa yang harus dilakukan pada prosesor.





  • Apa itu Windows API / WinAPI? - Ini adalah fungsi Windows, tanpanya Anda tidak dapat bekerja dengan Windows.





    Apa fungsi WinAPI? - Banyak hal:





  • Bekerja dengan file.





  • Bekerja dengan windows, menggambar, OpenGL, DirectX, GDI, dan sebagainya.





  • Interaksi dengan proses lain.





  • Bekerja dengan port.





  • Bekerja dengan konsol Windows





  • Dan masih banyak lagi fitur menarik lainnya.





Mengapa Anda membutuhkan assembler?

Anda dapat melakukan apa saja di dalamnya, dari OS hingga game 3D.





Inilah kelebihan assembler:





  • Dia sangat cepat.





  • .





:





  • . ()





  • .





(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'



- Ini adalah nama fungsi yang akan dimuat dari DLL, yaitu nama fungsi yang tertulis di DLL.





Selanjutnya saya pikir tidak ada gunanya menjelaskan, semuanya tampak jelas.





Apa itu pustaka DLL?

Ini adalah file dengan ekstensi DLL. File ini berisi fungsi (apa saja). Ini adalah program biasa, tetapi tidak diluncurkan dengan klik dua kali, tetapi dimuat ke dalam program ke dalam memori virtual, dan kemudian fungsi yang terletak di DLL ini dipanggil.





Menyimpulkan

Anda dapat menulis di assembler tanpa mengetahui bahasanya sendiri, tetapi hanya menggunakan perintah makro dari compiler. Untuk keseluruhan artikel, saya hanya menyebutkan 2 perintah assembler ini push hello



dan call [printf]



. Saya akan memberi tahu Anda apa artinya ini di artikel berikutnya.








All Articles