flat assembler
Message board for the users of flat assembler.

Index > Windows > Does not work CreateDialogParamA in PE64. Maybe FASM bug?

Author
Thread Post new topic Reply to topic
Garthower



Joined: 21 Apr 2006
Posts: 158
Location: Ukraine
Garthower
I had a problem with use of dialogue windows from resources in PE64. The window is not created, GetLastError returns an error 58Ch - "The window is not a valid dialog window". Here a code of the program and resource file.

Assembler code:
Code:
format PE64 GUI
entry start

include 'C:\fasm\INCLUDE\MACRO\STRUCT.INC'

IDC_ARROW               = 32512
CS_VREDRAW              = 00001h
CS_HREDRAW              = 00002h
COLOR_WINDOW            = 5
WM_DESTROY              = 0002h

struct POINT
  x                     dd ?
  y                     dd ?
ends

struct MSG
  hWnd                  dq ?
  umsg                  dq ?
  wparam                dq ?
  lparm                 dq ?
  time                  dq ?
  pt                    POINT
ends

struct WNDCLASSEX
  cbSize                dd ?
  style                 dd ?
  lpfnWndProc           dq ?
  cbClsExtra            dd ?
  cbWndExtra            dd ?
  hInstance             dq ?
  hIcon                 dq ?
  hCursor               dq ?
  hbrBackground         dq ?
  lpszMenuName          dq ?
  lpszClassName         dq ?
  hIconSm               dq ?
ends

;-- ----------------------------------------------------------------------------

section '.code' code readable executable

  start:
        lea rdi,[wc.hInstance]
        xor rcx,rcx
        call [GetModuleHandleA]
        stosq
        mov rcx,rax
        xor rdx,rdx
        call [LoadIconA]
        stosq
        xor rcx,rcx
        mov rdx,IDC_ARROW
        call [LoadCursorA]
        stosq
        mov rcx,wc
        call [RegisterClassExA]

        sub rsp,30h
        mov rcx,[wc.hInstance]
        mov rdx,DlgName
        xor r8,r8
        mov r9,WndProc
        mov qword [rsp+20h],0
        call [CreateDialogParamA]
        add rsp,30h
        or rax,rax
        jz .Exit_Prog

        lea rsi,[Message]
.Next_Msg:
        xor r9,r9
        xor r8,r8
        xor rdx,rdx
        mov rcx,rsi
        call [GetMessageW]
        or rax,rax
        jz .Exit_Prog

        mov rcx,rsi
        call [TranslateMessage]
        mov rcx,rsi
        call [DispatchMessageW]
        jmp .Next_Msg
.Exit_Prog:
        call [GetLastError]
        mov     ecx,eax
        call    [ExitProcess]

;..............................................................................
WndProc:
;hwnd           equ rcx
;wmsg           equ rdx
;wparam         equ r8
;lparam         equ r9

        sub rsp,5*8

        cmp rdx,WM_DESTROY
        jz Destroy
;..............................................................................
Exit_Proc_Def:
        call [DefWindowProcW]
Exit_Proc:
        add rsp,5*8
        ret
;##############################################################################
Destroy:
        xor rcx,rcx
        call [PostQuitMessage]
        xor rax,rax
        jmp Exit_Proc

;------------------------------------------------------------------------------

section '.data' data readable writeable

ClassName               db 'Test_Class',0
DlgName                 db 'TestDlg',0

wc_start:
wc                      WNDCLASSEX wc_end-wc_start,CS_HREDRAW or CS_VREDRAW,WndProc,0,0,0,0,0,COLOR_WINDOW,0,ClassName,0
wc_end:

;------------------------------------------------------------------------------

section '.bss' data writeable

Message                 MSG

;------------------------------------------------------------------------------
section '.idata' import data readable writeable

  dd 0,0,0,RVA kernel_name,RVA kernel_table
  dd 0,0,0,RVA user_name,RVA user_table
  dd 0,0,0,0,0

  kernel_table:
    ExitProcess dq RVA _ExitProcess
    GetModuleHandleA dq RVA _GetModuleHandleA
    GetLastError dq RVA _GetLastError
    dq 0
  user_table:
    MessageBoxA dq RVA _MessageBoxA
    CreateDialogParamA dq RVA _CreateDialogParamA
    LoadIconA dq RVA _LoadIconA
    LoadCursorA dq RVA _LoadCursorA
    RegisterClassExA dq RVA _RegisterClassExA
    DefWindowProcW dq RVA _DefWindowProcW
    PostQuitMessage dq RVA _PostQuitMessage
    GetMessageW dq RVA _GetMessageW
    TranslateMessage dq RVA _TranslateMessage
    DispatchMessageW dq RVA _DispatchMessageW
    dq 0

  kernel_name db 'KERNEL32.DLL',0
  user_name db 'USER32.DLL',0

  _ExitProcess dw 0
    db 'ExitProcess',0
  _GetModuleHandleA dw 0
    db 'GetModuleHandleA',0
  _MessageBoxA dw 0
    db 'MessageBoxA',0
  _CreateDialogParamA dw 0
    db 'CreateDialogParamA',0
  _LoadIconA dw 0
    db 'LoadIconA',0
  _LoadCursorA dw 0
    db 'LoadCursorA',0
  _RegisterClassExA dw 0
    db 'RegisterClassExA',0
  _DefWindowProcW dw 0
    db 'DefWindowProcW',0
  _PostQuitMessage dw 0
    db 'PostQuitMessage',0
  _GetMessageW dw 0
    db 'GetMessageW',0
  _TranslateMessage dw 0
    db 'TranslateMessage',0
  _DispatchMessageW dw 0
    db 'DispatchMessageW',0
  _GetLastError dw 0
    db 'GetLastError',0

;------------------------------------------------------------------------------

section '.rsrc' resource from 'test.res' readable writeable
    


Resource file:
Code:
TestDlg DIALOGEX 0,0,226,135
FONT 8,"MS Serif",0,0
CLASS "Test_Class"
STYLE DS_MODALFRAME | DS_3DLOOK | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
BEGIN
END

    


For compilation of a code I used FASM 1.67.7, for compilation of a resource file I tried two variants - GoRC 0.90 and BRCC32 5.0, result the same. In what a mistake? Can be FASM link program with a mistake? The most surprising that messages are processed by procedure of a window, and at processing does not arise any errors. But after processing message WM_MOVE the further messages don't reach procedure and there is an exit from procedure CreateDialogParamA.


Last edited by Garthower on 29 Aug 2006, 15:37; edited 1 time in total
Post 29 Aug 2006, 09:06
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number Reply with quote
Garthower



Joined: 21 Apr 2006
Posts: 158
Location: Ukraine
Garthower
Besides such situation and in PE32 Confused
Post 29 Aug 2006, 11:43
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number Reply with quote
Garthower



Joined: 21 Apr 2006
Posts: 158
Location: Ukraine
Garthower
2Tomasz Grysztar: Excuse for my importunity, but you could not look at this problem? All specifies that FASM not correctly joins the compiled resource dialogues with a target PE-file.
Post 31 Aug 2006, 10:15
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2020, Tomasz Grysztar. Also on GitHub, YouTube, Twitter.

Website powered by rwasa.