Hardware Access Console


Hardware Access Console is a free and useful software allowing you to have a direct access memory, PCI and input/output port under MS-DOS, Windows and Linux (x86 and ARM). The program interface is in console mode and consist in a simply set of commands for interact with hardware.



Physical Memory Address

The program can access any physical memory location under the 32 bit memory space. You can have a memory dump shown in the console or saved in a file. The program can also read or write to any physical memory address in byte, word or double word mode.

PCI Devices Registry Space

At program startup the software make a scanning of all PCI devices available in the system. To each device found is assigned an identification number used as reference for all the operations of read/write. You can show a detailed list of the PCI devices (with additional information like VendorID, DeviceID and so on) and read or write the PCI registers contained in the 255 bytes PCI space. The read or write operation can be in byte, word or double word mode. Like memory function is possible to have a PCI memory dump showed in the console or saved in a file.

Direct Input and Output operations

With a simply syntax you can make input or output operations to every system port. Like all the other commands the data format of the operation could be in byte, word or double word mode. For the special operation called "registry indexed mode" (one port is used for set the registry to modify and the next is used to read or write the register data) has been added a special command for make this operation as fast as possible.


Commands Info

NOTE: this version use an internal managed console for add commands
history feature (up and down arrow key for select old commands inserted).
Currently no problem under Windows and MS-DOS but in case you are using
some custom Linux console not compatible with standard ANSI is possible
you experiment some proble in console interface. In this case you need to run
the tool passing the "nohistory" param for disable the managed console
and use the native console input system.


Each address or size number are processed as hexadecimal format.
If you want to specify a different format you have to use the following syntax:

[number]x    Hexadecimal number

[number]t    Decimal number

[number]y    Binary number

Note that is you want to execute single or multiple commands without
open the console you can launch directly the command passing it as
parameter in command line (for example if you want use the tool inside a script).
The syntax is the following:

HAConsole -c [single_command]

Execute a single command

HAConsole -f [text_file_commands_list]

In this case you can pass to the tool a text file containing a list of multipe commands to execute

List of available commands

EXIT

- quit

Quit the application

HELP

- help

Show a generic list of main command categories

- help [command_name]

Show detailed info regarding the specific command requested.

Ex:

- help pci

- help mem

...

TOOLS

- loop < [command]

This command continuously repeat a command showing the result in real time. It could be useful for example if you want to continuously check some memory range or PCI registry.

Ex: loop < mem d 1000 100

NOTE: Since the data output is refreshed in the same position this command can not work if the data to show doesn't fit the console height size.

- save [file_name] < [command]

Save the binary output of the command specified to the file (work only with command return binary data).

Ex: save data.bin < mem d 1000 10

- search s "[string]" < [command]

Search the string into the output generated by the command

Ex: search s "Test" < mem d 1000 100

- search h XXXXXX < [command]

Search the hexadecimal pattern into the output generated by the command

Ex: search h AB125F44 < mem d 1000 100

- binary < [command]

Show the output of the command (max dword size) into binary form

Ex: binary < mem rw 1000

PCI

- pci

If used alone show the list off all PCI devices found in the system.
To each PCI device will be assigned an ID number. You need to use
this ID for specify the PCI device you want to work with.

- pci [ID] d

Show a raw dump of the PCI device registry

- pci [ID] db

Show a byte format dump of the PCI device registry

- pci [ID] dw

Show a word format dump of the PCI device registry

- pci [ID] dd

Show a double word format dump of the PCI device registry

MEMORY

- mem d [memory_address] [memory_size]

Show a raw dump of the physical memory starting from address and size as length

- mem rb [memory_address]

Read a byte from physical memory address

- mem rw [memory_address]

Read a word from physical memory address

- mem rd [memory_address]

Read a double word from physical memory address

- mem wb [memory_address] [data]

Write byte data to physical memory address

- mem ww [memory_address] [data]

Write word data to physical memory address

- mem wd [memory_address] [data]

Write double word data to physical memory address

INPUT/OUTPUT

------------------------------------------------------------------------

NOTE: input/output port are available only in x86 systems

INFO ABOUT INDEXED MODE: Some hardware require an Input/Output access
called in indexed mode. This simple mean for access to a single registry
it need two ports, the first receive the registry index to point and the
second read or write data in the registry. In some case this operation
must be executed very fast than a special command for make this
operation "atomic" was added.

Just for make and example an operation index mode for read in byte
mode from a registry 10 and using the port 1234 is like the following:

io iib 1234 10

------------------------------------------------------------------------

- io db [first_port_number] [number_port_to_dump]

Show a dump in byte mode of the port range requested

- io dw [first_port_number] [number_port_to_dump]

Show a dump in word mode of the port range requested

- io dd [first_port_number] [number_port_to_dump]

Show a dump in double word mode of the port range requested

- io dib [port_number] [first_index_reg] [number_regs_to_dump]

Show an indexed dump in byte mode of the port range requested

- io diw [port_number] [first_index_reg] [number_regs_to_dump]

Show an indexed dump in word mode of the port range requested

- io did [port_number] [first_index_reg] [number_regs_to_dump]

Show an indexed dump in double word mode of the port range requested

-io ib [port_number]

Input operation in byte mode

-io iw [port_number]

Input operation in word mode

-io id [port_number]

Input operation in double word mode

- io ob [port_number] [data]

Out data to port in byte mode

- io ow [port_number] [data]

Out data to port in word mode

- io od [port_number] [data]

Out data to port in double word mode

-io iib [port_number] [index_reg]

Indexed input operation in byte mode

-io iiw [port_number] [index_reg]

Indexed input operation in word mode

-io iid [port_number] [index_reg]

Indexed input operation in double word mode

- io iob [port_number] [index_reg] [data]

Indexed out data to port in byte mode

- io iow [port_number] [index_reg] [data]

Indexed out data to port in word mode

- io iod [port_number] [index_reg] [data]

Indexed out data to port in double word mode