FASM: Как отправить struct в proc? - PullRequest
1 голос
/ 23 января 2012

У меня есть такая структура:

struct MESGE
     TEXT db 'Message',0
     mLen db 8
ends 

И мне нужно отправить ее в процесс, который покажет строку на экране:

proc OutMes, pMESG:MESGE

  push 0
  push chrsWritten
  push [pMESG.mLen]
  push [pMESG.TEXT]
  push [hStdOut]
  call [WriteConsoleA]

  ret
endp

Как мне это сделать?этот?Если я использую тип MESGE в параметре, то fasm сообщает об ошибке.Если я использую тип dword (для отправки MESGE как ptr), я не знаю, как извлечь элементы этой структуры (на самом деле, их можно получить по смещению, но мне не нравится этот метод - если вstruct, конструкции будут такими сложными)

В MASM это можно сделать так:

ShowMessage PROC hMes: dword
mov ebx,hMes
assume ebx:ptr MESG
...

Но при построении FASM

assume ebx:ptr MESG
or 
assume ebx:[ptr MESG]

Сообщается как ошибка.Как я могу это сделать?

1 Ответ

2 голосов
/ 23 января 2012

Возможно, вы ищете директиву virtual :

struct MESGE
        TEXT db 'Message',0
        mLen dd 8
ends

.code
        mov     ebx,pMESGE
        call    OutMes
        ret


virtual at ebx
        oMESGE MESGE
end virtual

proc OutMes
        push 0
        push dummy
        push [oMESGE.mLen]
        lea  eax,[oMESGE.TEXT]
        push eax
        push [hout]
        call [WriteConsoleA]
        ret
endp

.data

pMESGE  MESGE
dummy   rd 1
hout    rd 1
...