view pdf in windows form c# : Add links to pdf SDK control service wpf web page winforms dnn win32asm_tutorial0-part1228

Win32Asm Tutorial
(C) Copyright by Mad Wizard (Thomas Bleeker)
Welcome to the win32asm tutorial. This is the online tutorial in htmlhelp format. The tutorial is always under
construction so make sure you've got the latest document.
You may spread this file freely, as long as it is used for non-profitable purposes. Commercial use is prohibited.
(C) Copyright 2000-2003 by Mad Wizard. Last (real) update:12-10-2000. Web:http://www.madwizard.org
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
1 / 53
Add links to pdf - 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 hyperlink to pdf in; add hyperlink to pdf acrobat
Add links to pdf - 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
add a link to a pdf in acrobat; pdf reader link
Win32Asm Tutorial
Contents
Note that these tutorials are continuously under construction.
0
Introduction
1
Assembly language
2
Getting started
3
Basics of asm
4
Memory
5
Opcodes
6
File structure
7
Conditional jumps
8
Something about numbers
9
More opcodes
10 The advantages of masm
11 Basics of asm in win
12 First Program
13 Windows in windows
14 Under construction
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
2 / 53
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
HTML converter toolkit SDK, preserves all the original anchors, links, bookmarks and to Use C#.NET Demo Code to Convert PDF Document to Add necessary references
pdf link to email; convert excel to pdf with hyperlinks
.NET PDF Document Viewing, Annotation, Conversion & Processing
PDF Write. Insert text, text box into PDF. Edit, delete text from PDF. Insert images into PDF. Edit, remove images from PDF. Add, edit, delete links. Form Process
add hyperlink pdf; add links to pdf
Win32Asm Tutorial
prevIntroduction to assemblernext
This is my win32asm tutorial. It is always under construction, but I'm working on it. With the next
and prev links in the navigation above, you can go the next and previous page. 
Introduction
First a short introduction about this tutorial. Win32asm isn't a very popular programming language,
and there are only a few (good) tutorials. Also, most tutorials focus on the win32 part of the
programming (i.e. the win API, use of standard windows programming techniques and so on), not on
the assembler programming itself, using opcodes, registers etc. Although you can find these things in
other tutorials, these tutorials often explain DOS programming. This sure helps you to learn the
assembly language, but with programming in windows, you don't need to know about DOS
interrupts and port in/out functions. In windows, there's the windows API that supplies standard
functions you can use in your program, but more on this later. The goal of this tutorial is to explain
win32 programming in assembler as well as assembly language itself.
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
3 / 53
VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.
Turn PDF images to HTML images in VB.NET. Embed PDF hyperlinks to HTML links in VB.NET. Convert PDF to HTML in VB.NET Demo Code. Add necessary references:
add a link to a pdf; active links in pdf
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
the original text style (including font, size, color, links and boldness). C#.NET DLLs and Demo Code: Convert PDF to Word Document in C# Add necessary references
clickable links in pdf files; pdf links
Win32Asm Tutorial
prev- Assembly languagenext
1.0 - Assembly Language
Assembly language is created as replacement for the raw binary code that the processor
understands. A long time ago, when there were no high-level programming languages yet, programs
were created in assembly. Assembly codes directly represent instructions the processor can execute.
For example:
add eax, edx
This instruction, add, adds two values together. Eax and edx are called registers, they can contain
values and are stored internally in the processor. This code is converted to 66 03 C2 (hexcodes). The
processor reads these codes, and executes the instruction it represents. High level languages like C
convert their own language to assembly, and the assembler converts it to binary codes:
C code
>> Compiler > >
Assembly
>>Assembler>>
Raw output (hex)
a = a + b;
add eax, edx
66 03 C2
(Note that this assembly code is simplified, output depends on the context of the C code)
1.1 - Why?
Why would you use asm instead of C or something if it's harder to program in asm??. Assembler
programs are small & fast. In very high-level programming languages like artificial intelligence, it
gets harder for the compiler to produce output code. The compiler has to figure out the fastest (or
smallest) method to produce assembly code, and although compilers still get better, programming
the code yourself (with option code optimalization) will produce smaller and faster code. But of
course this is much harder than high-level languages.
There's another difference with some high-level languages, that use runtime dll's for their functions.
For example, Visual C++ has msvcrt.dll which contains standard C functions. This works OK most of
the time, but sometimes causes problems with dll versions (dll hell) and the user always needs to
have these DLL's installed. For visual C this is not really a problem, they are installed with the
windows-installation. Visual Basic even doesn't convert it's own language to assembler (although
version 5 and above do this a little, but not fully), it depends highly on msvbvm50.dll, the Visual
basic virtual machine. The exe that is created by VB exists solely of simple pieces of code and many
calls to this dll. This is why VB is slow. Assembler is the fastest language there is. It only uses the
system DLL's kernel32.dll, user32.dll, etc.
Another misunderstanding is that many people think of assembly as an impossible language to
program in. Sure, it is difficult, but not impossible. Creating big projects in assembly indeed is hard
in assembler, I only use it for small programs, or DLL's that can be imported by other languages for
parts of the code that need speed. Also, there's a big difference between DOS & windows programs.
DOS programs use interrupts as 'functions'. Like int 10 for video, int 13 for file access etc. In win,
there's the API, Application Programming Interface. This interface consists of functions you can use
in your program. In dos programs, interrupts have an interrupt number and a function number. In
win, API functions just have names (e.g. MessageBox, CreateWindowEx). You can import libraries
(DLL's) and use the functions inside them. This makes it a lot easier to program in asm. You will
learn more about this in the next tutorials.
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
4 / 53
How to C#: Basic SDK Concept of XDoc.PDF for .NET
You may add PDF document protection functionality into your C# program. to edit hyperlink of PDF document, including editing PDF url links and quick
add hyperlink to pdf in preview; change link in pdf file
C# Create PDF Library SDK to convert PDF from other file formats
PDF with a blank page, bookmarks, links, signatures, etc. PDF document in C#.NET using this PDF document creating toolkit, if you need to add some text
pdf hyperlink; add a link to a pdf in acrobat
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
5 / 53
VB.NET PDF: Basic SDK Concept of XDoc.PDF
You may add PDF document protection functionality into your VB.NET program. to edit hyperlink of PDF document, including editing PDF url links and quick
change link in pdf; add links to pdf in preview
C# Image: Tutorial for Document Management Using C#.NET Imaging
more detailed C# tutorials on each part by following the links respectively are dedicated to provide powerful & profession imaging controls, PDF document, image
pdf link to attached file; add url pdf
Win32Asm Tutorial
prev- Getting startednext
2.0 - Getting started
Enough introduction for now, let's get started. To program in assembly, you will need some tools.
Below, you can see which tools I will use in this tutorial. I advise you to install the same tools, so you
can follow the tutorial and try the examples. I've also given some alternatives, for most tools you can
choose the alternative for this tutorial, but be warned that there is a big difference between the
assemblers (masm, tasm and nasm). In this tutorial masm will be used, because of it's useful
functions like invoke, which makes the programming much easier. Of course your free to go and use
the assembler you prefer, but it will be harder to follow this tutor and you will have to convert the
examples to make it work with your assembler.
Assembler
Used: Masm (from the win32asm package)
Location: Win32asm.cjb.net
Description: An assembler converts the assembly source code (opcodes) to the raw
output (object file) for the processor.
About: Masm, macro assembler, is an assembler with a few useful features, like
'invoke', which simplifies calls to API functions and data type checking, but you will
understand this later in this tutorial. If you have read the text above you will know
that for this tutorials it's advised to use masm.
Alternatives:
Tasm, nasm [dl]
Linker
Used: Microsoft Incremental Linker (link.exe)
Location: Win32asm.cjb.net (in the win32asm package)
Description: A linker 'links' all object files and libraries (for DLL import) together to
produce the final executable. 
Description: I will use link.exe which is available in the win32asm package at
Iczelion's page, but most linkers can be used.
Alternatives:
Tasm linker
Resource Editor
Used: Borland Resource Workshop
Location: Not free
Description: A resource editor is used for creating resources (images, dialogs,
bitmaps, menu's).
About: Most editors will be okay my personal favor goes out to resource workshop
but you can use what you want. Note: resource files created with resource
workshop sometimes gives problems with resource compiling, if you want to use
this editor, you should download tasm as well, which contains brc32.exe for
compiling borland-style resources.
Alternatives:
Symantec Resource Editor, Resource Builder, many others
Text Editor
Used: Ultraedit
Location: www.ultraedit.com 
Description: Does a text editor need a description?
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
6 / 53
Description: Does a text editor need a description?
About: The choice of a text editor is very personal, I like ultraedit very much. You
can download my wordfile for ultraedit, so you will have syntax highlighting for
assembler code. But at least choose a text editor that supports syntax highlighting
(keywords will automatically be colored), this is VERY useful and it makes your
code a lot easier to read and write. Ultraedit also has a function list to go to a specific
function in your code quick. [download wordfile here]
Alternatives:
One of the millions of text editors
References
Used: Win32 Programmer's reference
Location: (search the web)
Description: You will need a few references with API functions. The most important
is "win32 programmer's reference" (win32.hlp). This is a big file, about 24 mb (some
versions are 12 but are not complete). In this file, all the functions of the system dll's
(kernel, user, gdi, shell etc.) are described. You will at least need this file, other
references (sock2.hlp, mmedia.hlp, ole.hlp etc.) are also useful but not necessary.
Alternatives:
N/A
2.1 - Installing the tools
Now you've got these tools, install them somewhere. Here are a few important notes:
Install the masm package on the same drive you plan writing your assembly source files. This
ensures the paths to the includes and libraries are correct
add the bin directory of masm (and tasm) to your path in autoexec.bat and reboot.
If you've got ultraedit, use the wordfile you can download above and enable the function-
listview.
2.2 - Folder for your source
Create a win32 folder (or with any name you like) somewhere (on the same drive as masm), and
create a sub-folder for every project you make.
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
7 / 53
Win32Asm Tutorial
prev- Basics of asm next
3.0 - Basics of asm
This tutorials will teach you the basics of assembly language
3.1 - Opcodes
Assembler programs are created with opcodes. An opcode is an instruction the processor can
understand. For example:
ADD
The add instructions adds two numbers together. Most opcodes have operands:
ADD eax, edx
ADD has 2 operands. In the case of an addition, a source and a destination. It adds the source value
to the destination value and then stores the result in the destination. Operands can be of different
types: registers, memory locations, immediate values (see below).
3.2 - Registers
There are a few sizes of registers: 8 bit, 16 bit, 32 bit (and some more on a MMX processor). In 16-bit
programs, you can only use 16-bit registers and 8 bit registers. In 32-bit programs you can also use
32-bit registers.
Some registers are part of other registers; for example, if EAX holds the value EA7823BBh, here's
what the other registers contain.
EAX
EA 78 23 BB
AX
EA 78 23 BB
AH
EA 78 23 BB
AL
EA 78 23 BB
ax, ah, al are part of eax. Eax is a 32-bit register (available only on 386+), ax contains the lower 16 bits
(2 bytes) of eax, ah contains the high byte of ax, and al contains the low byte of ax. So ax is 16 bit, al
and ah are 8 bit. So, in the example above, these are the values of the registers:
eax = EA7823BB (32-bit)
ax = 23BB (16-bit)
ah = 23 (8-bit)
al = BB (8-bit)
Example of the use of registers (don't care about the opcodes, just look at the registers and
description):
mov eax,
12345678h
mov loads a value into a register (note: 12345678h is a hex value because
of the 'h' suffix)
mov cl, ah
move the high byte of ax (67h) into cl
sub cl, 10
substract 10 (dec.) from the value in cl
mov al, cl
and store it in the lowest byte of eax.
Let's examine the code above:
The mov instruction can move a value from a register, memory or an immediate value to another
register. In the example above, eax contains 12345678h. Then the value of ah (the 3rd byte from the
left in eax) is copied to cl (the lowest byte of the ecx register). Then, 10 is substracted from cl and it is
moved back to al (the lowest byte of eax).
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
8 / 53
There are different types of registers:
General Purpose
These 32-bit (and 16/8 for their components) registers can be used for anything:
eax (ax/ah/al)
Accumulator
ebx (bx/bh/bl)
Base
ecx (cx/ch/cl)
Counter
edx (dx/dh/dl)
Data
Although they have names, you can use them for anything.
Segment Registers
Segment registers define the segment of memory that is used. You'll probably won't need them with
win32asm, because windows has a flat memory system. In dos, memory is divided into segments of
64kb, so if you want to define a memory address, you specify a segment, and an offset (like
0172:0500 (segment:offset)). In windows, segments have sizes of 4gig, so you won't need segments in
win. Segments are always 16-bit registers.
CS
code segment
DS
data segment
SS
stack segment
ES
extra segment
FS (only 286+)
general purpose segment
GS (only 386+) general purpose segment
Pointer Registers
Actually, you can use pointer registers as general purpose registers (except for eip), as long as you
preserve their original values. Pointer registers are called pointer registers because their often used
for storing memory addresses. Some opcodes also (movb,scasb,etc.) use them.
esi (si)
Source index
edi (di)
Destination index
eip (ip)
Instruction pointer
EIP (or IP in 16-bit programs) contains a pointer to the instruction the processor is about to execute.
So you can't use eip as general purpose registers.
Stack Registers
There are 2 stack registers: esp & ebp. Esp holds the current stack position in memory (more about
this in one of the next tutorials). Ebp is used in functions as pointer to the local variables.
esp (sp)
Stack pointer
ebp (bp)
Base pointer
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
9 / 53
Win32Asm Tutorial
prev- Memorynext
4.0 - Memory
This section will explain how memory is handled in windows.
4.1 - DOS & win 3.xx
In 16-bit programs like for DOS and windows 3, memory was divided in segments. These segments
have sizes of 64kb. To access memory, a segment pointer and an offset pointer are needed. The
segment pointer indicates which segment (section of 64kb) to use, the offset pointer indicates the
place in the segment itself. Look at the following picture:
MEMORY
SEGMENT 1
(64kb)
SEGMENT 2
(64kb)
SEGMENT 3
(64kb)
SEGMENT
4(64kb)
and so on
Note that the following explanation is for 16-bit programs, more on 32-bit later (but don't skip this
part, it is important to understand 32-bits).
The table above is the total memory, divided in segments of 64kb. There's a maximum of 65536
segments. Now take one of the segments:
SEGMENT 1(64kb)
Offset 1
Offset 2
Offset 3
Offset 4
Offset 5
and so on
To point to a location in a segment, offsets are used. An offset is a location inside the segment.
There's a maximum of 65536 offsets per segment. The notation of an address in memory is:
SEGMENT:OFFSET
For example:
0030:4012 (all hex numbers)
This means: segment 30, offset 4012. To see what is at that address, you first go to segment 30, and
then to offset 4012 in that segment. In the previous tutorials, you've learned about segment and
pointer registers. For example, the segment registers are:
CS - Code segment
DS - Data Segment
SS - Stack Segment
ES - Extra Segment
FS - General Purpose
GS - General Purpose
The names explain their function: code segment (CS) contains the number of the section where the
current code that is executed is. Data segment for the current segment to get data from. Stack
indicates the stack segment (more on the stack later), ES, FS, GS are general purpose registers and
can be used for any segment (not in win32 though).
Pointer registers most of the time hold an offset, but general purpose registers (ax, bx, cx, dx etc.) can
also be used for this. IP indicates the offset (in the CS (code segment)) of the instruction that is
currently executed. SP holds the offset (in the SS (stack segment)) of the current stack position.
4.2 - 32-bit Windows
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
10 / 53
Documents you may be interested
Documents you may be interested