Как писать и читать с сетевой карты в сборке x86? - PullRequest
5 голосов
/ 03 декабря 2009

Кто-нибудь знает, как получить доступ к таким устройствам, как порт Ethernet на материнской плате или на карте PCI?

Существуют ли специальные регистры? Opcodes? Нужно ли звонить в ОС? Если да, то как?

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 03 декабря 2009

Это зависит от конкретной микросхемы Ethernet MAC, с которой вы пытаетесь разговаривать. Даже чипы в одной семье часто имеют небольшие различия в том, как они работают. Вот почему современные операционные системы имеют концепцию «драйвера»: производитель оборудования обычно пишет драйвер, потому что он знает оборудование, а драйвер обеспечивает перевод между оборудованием и тем, что ОС хочет видеть.

Часто вы можете получить документацию производителя микросхемы для написания собственного драйвера. Опять же, вы должны точно знать, с каким чипом вы пытаетесь поговорить, чтобы получить правильные характеристики. Некоторые чипы не имеют публичной документации, но обычно это не проблема с чипами Ethernet.

2 голосов
/ 03 декабря 2009

Самый простой ответ, хотя, вероятно, не тот, который вам нужен, - написать код C для доступа к карте, скомпилировать ее и посмотреть код, сгенерированный компилятором.

Код C, скорее всего, будет проходить через драйвер NIC напрямую или использовать библиотеку типа winpcap . Например, встроенная поддержка raw сокетов в Windows была отключена из соображений безопасности.

Но это не лучший способ узнать, как работают сетевые карты. Для этого выберите таблицу популярного встроенного сетевого адаптера, например LAN91C111 , и прочитайте, как получить к нему доступ. Это научит вас тому, как взаимодействовать с Этертет.

Это все еще не достаточно хорошая песочница для изучения ассемблера, ИМХО. Для этого достаточно реализовать несколько небольших алгоритмических программ на ассемблере - например, поиск в двоичном дереве.

0 голосов
/ 03 декабря 2009

Вам нужно будет написать на конкретные адреса портов. Эта вики-страница может помочь вам начать.
MemoryMappedIO

0 голосов
/ 03 декабря 2009

Вы можете использовать звонки на саму карту, используя инструкции inupt и output или что-то подобное. Каждая сетевая карта отличается, поэтому вам понадобится документация от производителя.

Следующий уровень - вызовы функций DOS, при условии, что вы используете Windows. Это позволит вам получить доступ к ограниченным возможностям сетевой карты с помощью стандартных вызовов MSDOS. Вы можете найти их в старой документации MSDOS. Большинство из них все еще работают в более поздних версиях Windows, если я не ошибаюсь.

...