invoke testproc, 1, 2, 3, 4
...masm will give you an error that the testproc procedure takes 3 parameters, not 4. Masm also has
type checking, i.e. it checks if the parameters have the right type (size).
In an invoke statement, you can use 
ADDR
in stead of 
OFFSET
. This will make an address in the
correct form when it's assembled.
Procedures are defined like this:
testproc PROTO STDCALL :DWORD, :DWORD, :DWORD
.code
testproc proc param1:DWORD, param2:DWORD, param3:DWORD
ret
testproc endp
This creates a procedure named testproc, with three parameters. The prototype is used by invoke
calls.
testproc PROTO STDCALL :DWORD, :DWORD, :DWORD
.code
testproc proc param1:DWORD, param2:DWORD, param3:DWORD
mov ecx, param1
mov edx, param2
mov eax, param3
add edx, eax
mul eax, ecx
ret
testproc endp
Now, the procedure does the following calculation. testproc(param1, param2, param3) = param1 *
(param2 + param3). The result, the return value, is stored in eax. Local variables are defined like this:
testproc proc param1:DWORD, param2:DWORD, param3:DWORD
LOCAL var1:DWORD
LOCAL var2:BYTE
mov ecx, param1
mov var2, cl
mov edx, param2
mov eax, param3
mov var1, eax
add edx, eax
mul eax, ecx
mov ebx, var1
.IF bl==var2
xor eax, eax
.ENDIF
ret
testproc endp
You can't use these variables outside the procedure. They are stored on the stack and removed when
the procedure returns.
10.3 - Macro's
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
31 / 53
Add a link to a pdf in preview - insert, remove PDF links in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Free C# example code is offered for users to edit PDF document hyperlink (url), like inserting and deleting
add link to pdf acrobat; add url to pdf
Add a link to a pdf in preview - VB.NET PDF url edit library: insert, remove PDF links in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Help to Insert a Hyperlink to Specified PDF Document Page
adding hyperlinks to pdf files; add hyperlink in pdf
Macro's will not be explained now. Maybe in a later tutorial, but right now they are not important to
us.
[top] 
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
32 / 53
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Remove bookmarks, annotations, watermark, page labels and article threads from PDF while compressing. Also a preview component enables compressing and
add hyperlinks pdf file; adding links to pdf document
C# PDF insert image Library: insert images into PDF in C#.net, ASP
viewer component supports inserting image to PDF in preview without adobe Insert images into PDF form field. How to insert and add image, picture, digital photo
add hyperlink to pdf online; add link to pdf
Win32Asm Tutorial
prev11- Basics of asm in winnext
11.0 - Basics of assembly in windows
Now you have some basic knowledge about assembly language, you will learn how to use assembly
in windows.
11.1 - API
The fundamental of programming in windows lies in the windows API, Application Programming
Interface. This is a set of functies supplied by the operating system. Every windows program uses
these functions. These functions are in the system dll's like kernel, user, gdi, shell, advapi, etc. There
are two types of functions: ANSI and Unicode. This has to do with the way strings are stored. With
ansi, each byte represents a symbol (asci-code) and uses a 0-byte to indicate the end of a string (null-
terminated). Unicode uses the widechar format, which uses 2 bytes per symbol. This allowes the
usage of languages that need more characters like chinees. Widechar strings are terminated with 2 0-
bytes. Windows supports both types by using different function names for ansi and unicode. For
example:
MessageBoxA (A-suffix for ansi)
MessageBoxW (W-suffix for widechar (unicode))
We will only use the ansi type.
11.1 - importing dll's
In order to use the functions from the windows API, you need to import the dll's. This is done by
import libraries (.lib). These libraries are necessary because they allow the system (windows) to load
the dll dynamically, i.e. at dynamic base addresses in memory. In the win32asm package
(win32asm.cjb.net) libraries for most standard dll's are supplied. You can load a library with the
includelib
statement of masm.
includelib C:\masm32\lib\kernel32.lib
This will load the library kernel32.lib. In the examples, this form is used:
includelib \masm32\lib\kernel32.lib
Now you will see why your assembly source files should be on the same drive as masm. Now you
can compile your program on an other computer without changing all the paths to the correct drive.
But an include library is not the only thing you need. An include file (.inc) is also needed. These can
be automatically generated from the libraries using the l2inc utiliy. An include file is loaded like this:
include \masm32\include\kernel32.inc
Inside the include file, the prototypes for the functions in the dll are defined, so you can use invoke.
kernel32.inc:
...
MessageBoxA proto stdcall :DWORD, :DWORD, :DWORD, :DWORD
MessageBox textequ <MessageBoxA>
...
You can see that the include file contains the ANSI functions and also defines the function names
withouth the 'A' to be the same as the real function name: you can use MessageBox in stead of
MessageBoxA. After you've included a library and an include file, you can use the function:
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
33 / 53
VB.NET PDF insert image library: insert images into PDF in vb.net
inserting image to PDF in preview without adobe provide users the most individualized PDF page image inserting function, allowing developers to add and insert
pdf hyperlinks; chrome pdf from link
C# PDF Page Insert Library: insert pages into PDF file in C#.net
Ability to add PDF page number in preview. Offer PDF page break inserting function. Free components and online source codes for .NET framework 2.0+.
add url link to pdf; adding hyperlinks to pdf
invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, NULL
11.2 - Windows include file
Then there's a special include file, called windows.inc most of the time, which contains all constants
and structures for the windows API. For example, a message box can have different styles. The
fourth parameter of the function is the style. NULL stands for MB_OK, which is just an OK button.
the windows include file contains definitions for these styles:
MB_OK equ 0
MB_OKCANCEL equ ...
MB_YESNO equ ...
So you can use these names as constants:
invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_YESNO
The example will use the include file from the masm package:
include \masm32\include\windows.inc
11.3 - Frame
.486
.model flat, stdcall
option casemap:none
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc
include \masm32\include\windows.inc
.data
blahblah
.code
start:
blahblah
end start
This is the basic frame for a windows assembly source file (.asm).
.486
Tells the assembler that it should generate opcodes for a 486 processor (or
higher). You can use .386, too but 486 works most of the time.
.model flat, stdcall
Use the flat memory model (discussed in one of the previous tutorials) and use
the stdcall calling conventenion. This means that parameters for the function are
pushed right to left (last parameter first pushed) and that the function should
correct the stack itself when finished. This is standard for almost all windows
api functions and dll's.
option
casemap:none
Controls the mapping of characters to uppercase. For the windows.inc file to
work properly, this should be 'none'.
includelib
discussed above
include
also discussed above
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
34 / 53
C# PDF insert text Library: insert text into PDF content in C#.net
Able to add a single text character and text string to PDF files using online source codes in C#.NET Supports adding text to PDF in preview without adobe
add hyperlinks to pdf; add link to pdf file
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Independent component for splitting PDF document in preview without using external PDF VB.NET PDF Splitting & Disassembling DLLs. Add necessary references:
add hyperlinks to pdf online; pdf hyperlinks
.data
start of the data section (see previous tutorials)
.code
start of the code section (see previous tutorials)
start:
end start
label that indicates the start of the program. Not that it doesn't need to be called
'start'. You can use any name for it as long as you indicate that it is a start label
using the 'end' statement:
startofprog:
end startofprog
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
35 / 53
C# PDF File Split Library: Split, seperate PDF into multiple files
Advanced component for splitting PDF document in preview without any third-party plug-ins installed. C# DLLs: Split PDF Document. Add necessary references:
adding a link to a pdf in preview; clickable pdf links
C# Create PDF Library SDK to convert PDF from other file formats
Preview PDF documents without other plug-ins. this PDF document metadata adding control, you can add some additional information to generated PDF file
add links to pdf file; convert excel to pdf with hyperlinks
Win32Asm Tutorial
prev12- First Program next
12.0 - First Program
It's time to create your first program. Instructions in this tutorial are formatted like this.
12.1 - Step 1
If all's okay, you should have a win32 (or win32asm) folder on your harddisk on the same drive as
masm. For each project, you should create a subdirectory.
Create a subdirectory called 'Firstprogram' in your win32 dir. Create a new textfile and rename it to
'first.asm'.
important: If you are using ultraedit, make sure you've installed my wordfile and switch on the
'functions' window (view, views/lists, function list). Finally, make sure you have set the tab stop
value to 4 spaces (Advanced, configuration, Edit tab)
12.2 - Step 2
Put the following code into first.asm:
.486
.model flat, stdcall
option casemap:none
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\windows.inc
For now, the only two dll's we need are kernel32 and user32.
12.3 - Step 3
We are going to make the famous 'Hello world' program. To display the 'hello world' string we will
use a message box. A messagebox is created using the MessageBox function. You can look up this
function in the win32 programmer's reference (see tutor 2) . Here is what it says:
The MessageBox function creates, displays, and operates a message box. The message box contains
an application-defined message and title, plus any combination of predefined icons and push buttons.
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box 
UINT uType // style of message box
); 
Parameters
hWnd
Identifies the owner window of the message box to be created. If
this parameter is NULL, the message box has no owner window.
lpText
Points to a null-terminated string containing the message to be
displayed.
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
36 / 53
VB.NET PDF insert text library: insert text into PDF content in vb
Add text to certain position of PDF page in Visual Basic .NET class. Add text to PDF in preview without adobe reader component installed.
add page number to pdf hyperlink; chrome pdf from link
lpCaption
Points to a null-terminated string used for the dialog box title. If
this parameter is NULL, the default title Error is used.
uType
Specifies a set of bit flags that determine the contents and
behavior of the dialog box. This parameter can be a combination
of flags from the following groups of flags.
[--SNIP--]
After this text a whole list of constants and flags (which are defined in windows.inc) follows. I haven't
displayed it here because it is quite long. Looking at the reference, you can see that the MessageBox
function takes 4 parameters: A parent window, a pointer to a message string, a pointer to a title
string and the type of messagebox.
hWnd can be NULL, because our program does not have a window.
lpText has to be a pointer to our text. This just means that the parameter is the offset of the memory
location where our text is.
lpCaption is the offset of the title string.
uType is a combination of the values explained in the reference like MB_OK, MB_OKCANCEL,
MB_ICONERROR, etc.
Let's first define two strings for the messagebox:
add this to first.asm:
.data
MsgText db "Hello world!",0
MsgTitle db "This is a messagebox",0
.data
indicates the start of the data section. With 
db
bytes are directly inserted, and as a string is
just a collection of bytes, the data section will contain the strings above, 0-terminated by the
additional 
,o
. MsgText holds the offset of the first string, MsgTitle the offset of the second string.
Now we can use the function:
invoke MessageBox, NULL, offset MsgText, offset MsgTitle, NULL
But because invoke is used, you can use the (more safe) ADDR in stead of offset:
invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, NULL
We haven't looked at the last parameter yet, but this will work fine because MB_OK (style for a
messagebox with an OK button) equals 0 (NULL). But you can use any other style. The uType (4th
parameter) definiton is:
Specifies a set of bit flags that determine the contents and behavior of the dialog box. This parameter
can be a combination of flags from the following groups of flags.
Now take for example that we want a simple messagebox with an OK button with the 'information'-
icon. MB_OK is the style for the OK button, MB_ICONINFORMATION is the style for an information
icon. Styles are combined with the 'or' operator. This is not the or-opcode. Masm will perform the or
operation before assembling. In stead of or, you can use the + sign (addition), but sometimes this
gives problems with overlapping styles (one style containg some other style). But in this case you
could also have used a +.
.code
start:
invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK +
MB_ICONINFORMATION
end start
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
37 / 53
Add the code above to your first.asm file
We've added a start label, too. If you would assemble your program now and run it, it would
display the messagebox and probably crash after you've clicked ok. This is because the program is
not ended, and the processor starts to execute whatever there is after the messagebox code.
Programs in windows are ended with ther ExitProcess function:
The ExitProcess function ends a process and all its threads.
VOID ExitProcess(
UINT uExitCode // exit code for all threads 
);
We can use 0 as exit code:
Change your code to this:
.code
start:
invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK +
MB_ICONINFORMATION
invoke ExitProcess, NULL
end start
12.4 - Step 4
So our final program is:
.486
.model flat, stdcall
option casemap:none
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\windows.inc
.data
MsgText db "Hello world!",0
MsgTitle db "This is a messagebox",0
.code
start:
invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK or
MB_ICONINFORMATION
invoke ExitProcess, NULL
end start
12.5 - Step 5
Now we will create an executable from this source code.
Create a new text file named make.bat with the following content:
@echo off
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
38 / 53
ml /c /coff first.asm
link /subsystem:windows first.obj
pause>nul
Explanation:
ml /c /coff first.asm
ml is the macro assembler (masm). Masm will create the raw code from
the program. The options mean:
/c = Assemble without linking. (because we use link.exe for this)
/coff = generate COFF format object file. This is the standard for a
windows executable.
first.asm = assemble the file first.asm
link /subsystem:windows
first.obj
The linker takes the object file and links it to all the imported dll's and
libraries. Options:
/subsystem:windows = Create an executable for windows.
first.obj = link first.obj
If you've done verything right and run the batch file, there will be a first.exe now. Run it to see the
results.
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
39 / 53
Win32Asm Tutorial
prev13- Windows in windowsnext
12.0 - Windows in windows
In this tutorial, we will create a program with a window.
12.1 - Windows
You can probably guess why windows is called windows. In windows, there are two types of
programs: GUI applications and console applications. Console mode programs look like DOS
programs, they run in a DOS-like box. Most program's you use are GUI (graphical user interface)
applications. They have a graphical interface to interact with the user. This is done by creating
windows. Almost everything you see in windows is a window. First you create a parent window,
and then its client windows (controls) like edit boxes, static controls, buttons etc.
12.2 - Window Classes
Each window has a class name. For your parent window you define your own class. For controls,
you can use the standard windows class names (e.g. 'EDIT', 'STATIC', 'BUTTON').
12.3 - Structures
A window class in your program is registered by using the 'RegisterClassEx' function
(RegisterClassEx is the extended version of RegisterClass, which is not being used much). The
declaration of this function is:
ATOM RegisterClassEx(
CONST WNDCLASSEX *lpwcx // address of structure with class data
);
lpwcx: Points to a WNDCLASSEX structure. You must fill the structure with
the appropriate class attributes before passing it to the function.
The only parameter is a pointer to a structure. First some basics about structures:
A structure is a collection of variables (data). It is defined with STRUCT:
SOMESTRUCTURE STRUCT
dword1 dd ?
dword2 dd ?
some_word dw ?
abyte db ?
anotherbyte db ?
SOMESTRUCTURE ENDS
(the structure name doesn't have to be in capitals)
You can declare your variables just like in the uninitialized data section, with question marks. Now
you can create a structure from the definition:
Initialized
Initializedstructure SOMESTRUCTURE <100,200,10,'A',90h>
Uninitialized
UnInitializedstructure SOMESTRUCTURE <>
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
40 / 53
Documents you may be interested
Documents you may be interested