Fasm x64 MsgBox - PullRequest
       71

Fasm x64 MsgBox

2 голосов
/ 05 мая 2020

Я хочу скомпилировать приложение x64 с простым MsgBox с помощью Fasm. Я написал код, он успешно компилируется, но когда я его запускаю, ничего не отображается, и программа просто завершается. Что не так?

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'

При попытке отладки в VS2017 я получаю исключение:

Вызвано исключение по адресу 0x0000000000001108 в program.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x0000000000001108.

Если перевести:

Исключение по адресу 0x0000000000001108 в program.exe: 0xC0000005: нарушение прав доступа при выполнении адреса 0x0000000000001108.

1 Ответ

2 голосов
/ 06 мая 2020

Я отмечаю это как вики сообщества, чтобы другие могли добавить описание того, почему это работает. Следует отметить:

  • .idata раздел для импорта
  • .text раздел, который является исполняемым
  • sub rsp, 8 (или аналогичный, например push rbp) для выравнивание стека в соответствии с соглашением о вызовах Windows x86-64.

Код:

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