Hexiwin Main Page
Hexadecimal Info:
Hexadecimal is a base 16 number system. The number system we use in everyday life is the decimal, which is a base 10 number system that
has 10 digits 0-9, whereas hexadecimal has 16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. The computer works with the binary number system,
which is a base 2 number system that has 2 digits 0, 1. The reason the computer works with only 2 digits is because these 2 digits represent
a transistors status, 0 being an off state, and 1 being an on state. The computer really doesn't use these 0's and 1's, all it knows about is on or
off. The 0's and 1's are for us humans so we can get a grasp of what is going on.
A large number in binary is about as long as your arm, for example the decimal number 1,000,000 in binary is 11110100001001000000, but
in hexadecimal it is F4240, so with hexadecimal us humans can represent large numbers with less digits.
When you dump the hex values of a file with a program like hexiwin you are dumping the hexadecimal representation of each byte of that file.
A byte can have a number from 0-255, because the the highest number a byte can hold is 255. In binary 255 is 11111111 meaning all the
transistors at that bytes location are in the on state. When you dump a file to hex each byte is translated from binary to hexadecimal, so each
byte will have a hex value from 0-FF. These hex values represent either code or data, code being instructions meant for the processor, and telling
it to carry out operations with the data of the file. The data can be variables, strings of words, or any data used by the program. If you made a
program to add 2 to a variable named num, then the instructions telling the proccessor to add 2 to the variable named num would be code and
the variable num itself would be data.
These hex values you see when you open an executable program with a hex editor is called machine language. Machine language is the actual
language that the computer understands. You can write programs in machine language, but it's so hard that you'd have to be a programming
mastermind and a glutton for punishment, but I'm sure there are some people out there doing it. The next step up from machine language is
assembly language. Assembly language is more human friendly than machine language, but it's close enough to machine language to where you
can learn how the computer is actually doing the amazing things it does. Assembly is hard to learn, but to really understand the computer you
have to understand some assembly. I made Hexiwin with the C programming language, which is a lot easier to do than assembly. I'd like to make
Hexiwin in assembly, just to see if I could do it, but that would be a monumental task.
0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X
To explain what you'll see when you dump a file to screen is an example below.
00000000: 4D5A 9000 0300 0000 0400 0000 FFFF 0000 MZ..............
Above are the first 16 bytes of the hexiwin program. The first 8 digits represent the byte address within the program, and it is: 00000000, so
this is the very beginning of the file. The following numbers: 4D5A 9000 0300 0000 0400 0000 FFFF 0000 are the hexadecimal representations
of bytes 0-15. They are grouped in 2 bytes, or a word. These hex numbers represent instuctions that the processor understands, or data in the
program like numbers, characters, or strings. The last set of sixteen characters: MZ.............. are the ascii representations of bytes 0-15.
Happy Hexing!