NO

Author Topic: Binary resource data with INCBIN  (Read 4143 times)

Offline Vortex

  • Member
  • *
  • Posts: 868
    • http://www.vortex.masmcode.com
Binary resource data with INCBIN
« on: May 08, 2024, 09:42:44 PM »
Hello,

Here is an example to read binary data from a compiled resource script with INCBIN :

Code: [Select]
.386
.model flat,stdcall
option casemap:none

include Dialog.inc

includelib  \PellesC\lib\Win\kernel32.lib
includelib  \PellesC\lib\Win\user32.lib

DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD

.data

Resource:
INCBIN Rsrc.res,80
msg db 'Dialog box with menu',0

title1 db 'Hello!',0

IDM_HELLO   equ 11
IDM_EXIT    equ 12
IDC_HELLO   equ 110
IDC_EXIT    equ 120
IDC_EDIT    equ 3000

.code

start:

    invoke  GetModuleHandle,NULL
    invoke  DialogBoxIndirectParam,eax,ADDR Resource,\
            NULL,ADDR DlgProc,NULL
    invoke  ExitProcess,eax

DlgProc PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

    .IF uMsg==WM_INITDIALOG
       
        invoke  LoadIcon,NULL,IDI_APPLICATION
        invoke  SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
        lea     eax,[Resource+0A0h]
        invoke  LoadMenuIndirect,eax
        invoke  SetMenu,hWnd,eax
       
    .ELSEIF uMsg==WM_CLOSE
   
        invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0

    .ELSEIF uMsg==WM_COMMAND

        mov eax,wParam
       
        .IF lParam==0
       
            .IF ax==IDM_HELLO
           
                invoke  MessageBox,NULL,ADDR msg,ADDR title1,MB_OK
               
            .ELSEIF ax==IDM_EXIT
           
                invoke  EndDialog, hWnd,NULL
            .ENDIF
           
        .ELSE
       
            mov edx,wParam
            shr edx,16
           
            .IF dx==BN_CLICKED
                               
                .IF ax==IDC_HELLO
               
                    invoke  SendMessage,hWnd,WM_COMMAND,IDM_HELLO,0
                   
                .ELSEIF ax==IDC_EXIT
               
                    invoke  EndDialog,hWnd,NULL
                .ENDIF
               
            .ENDIF
           
        .ENDIF
       
    .ELSE
   
        mov eax,FALSE
        ret
       
    .ENDIF
   
        mov eax,TRUE
        ret
       
DlgProc ENDP

END start
Code it... That's all...

Offline Vortex

  • Member
  • *
  • Posts: 868
    • http://www.vortex.masmcode.com
Re: Binary resource data with INCBIN
« Reply #1 on: August 23, 2024, 10:04:41 PM »
Similar example, 64-bit version.

Code: [Select]
.model flat,fastcall

include     ColorDlg.inc

.data

Resource:
INCBIN Rsrc.res,80

msg         db 'Dialog box example',0
title1      db 'About',0

.data?

hBrush      qword ?

.code

start PROC PARMAREA=5*QWORD

LOCAL hModule:QWORD

invoke GetModuleHandle,NULL
        mov    hModule,rax
        lea    rdx,[rip+Resource]
invoke DialogBoxIndirectParam,hModule,rdx,NULL,ADDR DlgProc,NULL
invoke ExitProcess,rax

start ENDP

DlgProc PROC hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD PARMAREA=12*QWORD

LOCAL _hWnd:QWORD

    mov _hWnd,rcx
   
    .IF edx==WM_INITDIALOG

        lea     rax,[rip+Resource+0C4h]
        invoke  LoadMenuIndirect,rax
        invoke  SetMenu,_hWnd,rax

    .ELSEIF edx==WM_CTLCOLORDLG
   
        invoke  CreateSolidBrush,Blue
        mov     [rip+hBrush],rax
        ret

    .ELSEIF edx==WM_CLOSE
   
        invoke  SendMessage,rcx,WM_COMMAND,IDM_EXIT,0

    .ELSEIF edx==WM_COMMAND

        mov rax,r8
       
        .IF r9==0
       
            .IF ax==IDM_ABOUT
           
                invoke MessageBox,NULL,ADDR msg,ADDR title1,MB_OK
                       
            .ELSEIF ax==IDM_EXIT
           
                invoke DeleteObject,[rip+hBrush]
                invoke EndDialog,_hWnd,NULL
               
            .ENDIF
           
        .ELSE
       
            mov rdx,r8
            shr edx,16
           
            .IF dx==BN_CLICKED
                               
                .IF ax==IDC_ABOUT
               
                    invoke SendMessage,_hWnd,WM_COMMAND,IDM_ABOUT,0
                           
                .ELSEIF ax==IDC_EXIT
               
                     invoke SendMessage,_hWnd,WM_COMMAND,IDM_EXIT,0
                   
                .ENDIF
            .ENDIF
        .ENDIF
    .ELSE
   
        mov rax,FALSE
        ret
       
    .ENDIF
   
    mov rax,TRUE
    ret
   
DlgProc ENDP

END start
Code it... That's all...