Click here to Skip to main content
15,867,686 members
Articles / Desktop Programming / Win32

Introduction In DLLs Creation Using MASM

Rate me:
Please Sign up or sign in to vote.
4.14/5 (5 votes)
4 Oct 2009CPOL2 min read 39.1K   1.5K   15   7
Shows how to create a simple DLL and invoke it in another program

Introduction

In this article, I will talk about the creation of a DLL using Assembly (MASM) and the creation of a program that invokes that sample DLL.

Creation of the DLL

Steps

First of all, you need to do some things. Define the normal things (.386 and the includes), then you will need to declare the main procedure of a DLL (LibMain), the next will be all the other procedures of the DLL. In this tutorial, I will use only one (PrintMess), but you can use however many you need.

Here is the code of the sample DLL:

ASM
 .386
option casemap :none   ; case sensitive
 include \masm32\include\masm32rt.inc 
.code
LibMain proc instance:dword,reason:dword,unused:dword 
    mov     eax,1
    ret
LibMain     endp
PrintMess proc
    print "Test", 10   ; message that will be printed by another program
    inkey   ; like pause command in batch
    exit   ; exits the program
PrintMess endp
End LibMain

Very Brief Description

In the PrintMess procedure, I'm using print to show a message in the screen, that 10 after will move the cursor to a new line for the inkey function. Now let's go to the program that will use this DLL.

Creation of the Program

Steps

First of all, you need to do some things. Define the normal things (.386, .model and the includes), then you will declare some variables (hLib and hProc), the next will be the main program by using the DLL.

Here is the code of the sample program:

ASM
.386
.model stdcall,flat
 include \masm32\include\kernel32.inc
 includelib \masm32\lib\kernel32.lib
 
.data
    hLib dword ?
    hProc dword ?
.data
    lib byte "testdll.dll", 0
    function byte "PrintMess", 0
.code
start:
    push offset lib
    call LoadLibrary ; will load the dll
    mov hLib, eax
    push offset function
    push hLib
    call GetProcAddress ; will get the procedure to execute
    mov hProc, eax
    call hProc ; will call your function in your DLL
    push hLib
    call FreeLibrary ; free the resource
    ret
end start

Brief Description

Now let's explain the code very quickly. I've declared a variable called lib that will store where the DLL is to open it and another variable called function that will store what procedure the program will execute (remember that you can create many other variables to other procedures), then the program will load the DLL using LoadLibrary that is stored in hLib variable. Next, the GetProcAddress will get the address of the procedure (PrintMess). After this, we need to call the function that is in hProc and to end we need to free the DLL using the FreeLibrary function.

History

  • 4th October, 2009: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
CEO
Brazil Brazil
I develop for mobiles since 2005, using J2ME for those old color mobile phones(like the good Nokia ones), after this at 2006 I've started on WIndows Mobile development using VB and some C#, at 2007 I was totally focused on Windows Mobile development, developing things like Calendars, simple games and a fully-featured text editor. Aug 2008 I moved to Symbian S60 3rd development using Python and C++. After that I've started on the platform that I like most: Android. One week ago I bought my first Mac, so I was going to start on iOS development, but I saw that it's so much difficult(Objective-C is the problem)

Comments and Discussions

 
QuestionCompilation command Pin
Jean-Louis GUENEGO28-Mar-14 3:31
Jean-Louis GUENEGO28-Mar-14 3:31 
What are the compilation commands (compile, link) ?
GeneralMy vote of 1 Pin
shobits128-Nov-09 23:48
shobits128-Nov-09 23:48 
GeneralRe: My vote of 1 Pin
Nathan Campos31-May-10 6:27
Nathan Campos31-May-10 6:27 
GeneralMore detail! Pin
cplas5-Oct-09 18:35
cplas5-Oct-09 18:35 
GeneralRe: More detail! Pin
Nathan Campos6-Oct-09 6:11
Nathan Campos6-Oct-09 6:11 
GeneralRe: More detail! Pin
cplas6-Oct-09 7:33
cplas6-Oct-09 7:33 
GeneralRe: More detail! Pin
Nathan Campos6-Oct-09 7:54
Nathan Campos6-Oct-09 7:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.