PDA

Показать полную графическую версию : как в Perl получить низкоуровневый доступ к hdd?


Тишина
07-05-2014, 19:09
сабж

среда: win или Lin - не важно

lxa85
07-05-2014, 23:37
Тишина, насколько низкоуровневый?
Linux: /dev/hda подойдет? С соотв. уровнем прав запуска разумеется.
sudo, chmod, chown, и т.п.

Тишина
08-05-2014, 14:52
непосредственное обращение к hdd для чтения/записи N-ого сектора. пишу прогу типа HEX-редактор диска

а возможно ли считывать из /dev/sd* или /dev/hd* определённый сектор?
если конструкция типа через временный файл при помощи dd - это не подойдёт

lxa85
08-05-2014, 15:25
Рыть гугл со словами DMA linux program /dev/hda/ direct access random cylinder и т.д.
Заодно посмотреть исходники программ: hdparm, fdisk, и еще чего-нибудь.
Нашлось на вскидку, а там не знаю:
Chapter 8. Device Drivers (http://rus-linux.net/MyLDP/BOOKS/tlk-0.8-3.html/dd/drivers.html) 8.4.2 и ниже
Activating and Deactivating UDMA (http://www.tldp.org/HOWTO/archived/Ultra-DMA/Ultra-DMA-8.html),
linurs - HardDisk (http://www.linurs.org/linux/HardDisk.html)
Kernel/Gentoo Kernel Configuration Guide (https://wiki.gentoo.org/wiki/Kernel/Gentoo_Kernel_Configuration_Guide/en#IDE_chipsets_and_DMA),
http://rus-linux.net/MyLDP/BOOKS/rute/node22.html.

Тишина
08-05-2014, 15:38
оно вообще в перле "скушается"?
дело в том, что если мы на каждое обращение к диску будем использовать внешние команды типа dd или bash - имхо, работать будет медленно...

*спасибо за ссылки!

lxa85
09-05-2014, 00:17
perl, linux, driver, С структуры, cpan.
Мысль пока пусть полежит. Завтра проснусь, вспомню, напишу развернутый ответ.

lxa85
12-05-2014, 10:00
Мысль сводится к тому, чтобы посмотреть, как идет низкоуровневая работа с устройствами.
Традиционно это С-язык или его ближайшие родственники. Скажем так "сложилось исторически".
Соотв. надо либо найти исходные коды программ для работы с hdd. Посмотреть, спецификацию на файловые системы, структуры, описывающие каталоги, файлы и пр. (Пока такие вещи как LVM трогать не стоит... а может как вариант).
Для справки почитать про адресацию памяти (LBA и прочее).
Возможно придется порыться в описании драйверов устройств. Выяснить, как они работают с /dev/hda на предмет получения произвольного доступа, если таковой существует.
Как вариант достать исходные коды какой либо ОС, и посмотреть что там делается.
(hdparam в ту же сторону)
----
Теперь к perl.
По данному языку существует www.cpan.org (The Comprehensive Perl Archive Network - www.cpan.org/). Основное хранилище самых различный программ на perl. Соотв. поиск тоже не помешает.
----
Утром попались следующие ссылки:
get the hard disk information using perl (http://stackoverflow.com/questions/3519575/get-the-hard-disk-information-using-perl)
Securely Erasing a Hard Drive with Perl (http://www.tcu-inc.com/Articles/14/Wipe_It.html)
Can Perl read the hard drive registration #? (http://www.perlmonks.org/?node_id=338312)
----
Сумбурно пока так. Надо определяться, на каком уровне "низкоуровневка", и как она выглядит в реалиях (абстракциях).

Тишина
13-05-2014, 17:59
спасибо, вечером изучу эти ссылки!

для С есть LinuxAPI и там что-то вроде win-аналога функции createfile() из WinAPI. другое дело в том, что в perl многие мелочи (превидение типов данных, работа со списками) уже реализовано, что может затормозить написания программы под C (ввиду моего неуверенного знания ООП на нём), т.е. может потребоваться много времени на дебаг.

если же на деле считывать с hdd как с блочного устройства не получится, то попробую "хитрую" подстановку dd. хотя это уже не ПО, а сурогат получится

User001
14-05-2014, 09:19
C (ввиду моего неуверенного знания ООП на нём) »ООП на чистом Си?

Тишина
15-05-2014, 10:49
да, я про С/С++. поэтому лишние действия с подгонкой типов данных и выполнения (если потребуется) внешних скриптов и программ - могут повлечь за собой дополнительные ошибки.
perl в этом плане мне кажется более лёгким и определённым.




© OSzone.net 2001-2012