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 |