Page 1 of 1

Introduction In DLLs Creation Using MASM Shows how to create a simple DLL and invoke it in another program

#1 nathanpc  Icon User is offline

  • SCIENCE!
  • member icon

Reputation: 112
  • View blog
  • Posts: 1,171
  • Joined: 31-July 09

Post icon  Posted 02 December 2009 - 06:47 AM

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

Is This A Good Question/Topic? 0
  • +

Page 1 of 1