2 votes

Fasm x64 MsgBox

Je veux compiler une application x64 avec un simple MsgBox en utilisant Fasm. J'ai écrit le code, il se compile avec succès, mais lorsque je l'exécute, rien ne s'affiche et le programme se termine. Quel est le problème ?

format PE64 GUI 4.0
entry main

include 'win64a.inc'

main:
  invoke MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK
  invoke ExitProcess,0

library kernel32,'kernel32.dll',\
        user32,'user32.dll'

include 'api/kernel32.inc'
include 'api/user32.inc'

Si j'essaie de déboguer dans VS2017, j'obtiens une exception :

0x0000000000001108 program.exe : 0xC0000005 : 0x0000000000001108.

Si traduire :

Exception à l'adresse 0x0000000000001108 dans program.exe : 0xC0000005 : violation d'accès lors de l'exécution de l'adresse 0x0000000000001108.

3voto

Michael Petch Points 24066

Je marque ceci comme un wiki communautaire pour que d'autres puissent compléter la description de ce qui fonctionne. A noter :

  • .idata section pour les importations
  • .text section qui est exécutable
  • sub rsp, 8 (ou un équivalent comme push rbp ) pour l'alignement de la pile selon la convention d'appel de Windows x86-64.

Le code :

include 'win64a.inc'

format PE64 GUI 4.0
entry main

section '.text' code readable executable
main:
  sub rsp, 8
  invoke MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK
  invoke ExitProcess,0

;section '.data' data readable writeable
; Data here

section '.idata' import data readable
library kernel32,'kernel32.dll',\
        user32,'user32.dll'

include 'api/kernel32.inc'
include 'api/user32.inc'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X