2009-12-03 4 views
3

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

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

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

+0

Что вы пытаетесь сделать? Написать драйвер? Драйвер - это единственное место, где этот вид доступа подходит ... Какая ОС? – mch

+0

Хотелось бы просто экспериментировать - может быть, передать пакет или два? Сейчас я участвую в сборке (MIPS), а также работаю в исследовательской лаборатории сетей, поэтому я думал, что это будет слияние двух. Я бы прекрасно развивался на любой крупной ОС, но префы поменялись бы с Mac, Linux, Win. – Kevin

ответ

2

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

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

+0

Ничего себе, это здорово (в том смысле, что я только что узнал что-то новое). Благодаря! Итак, если я нахожу правильную спецификацию для своего чипа MAC, я мог бы по существу написать собственный драйвер для развлечения или другой функции. Есть ли простой способ узнать об MAC-чипе на уровне приложения? И, очевидно, драйверы должны быть собраны в байт-код, но есть ли простой способ «разобрать» их обратно на сборку? Этот шаг часто происходит в сообществе Linux правильно? – Kevin

+0

Да, вы должны иметь возможность писать драйвер только из документов чипа; поиск указанных документов может быть проблемой. Чтобы обнаружить используемый чип, вы можете ходить по таблицам устройств PCI; в Linux, например, есть команда lspci, которая делает это за вас. Да, вы можете разобрать драйвер, но нет оснований для этого, если у вас есть спецификации для чипа. И нет, Linux Ethernet-драйверы обычно не обращаются в обратном порядке от драйверов Windows. Это иногда случается с другими типами драйверов, но, как я уже сказал, спецификации Ethernet-чипа обычно не так уж и сложны. –

0

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

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

+0

Я считаю, что прямой доступ к порту запрещен в коде пользовательского режима под любыми окнами после 9x. –

+0

Есть ли у вас примеры? Загрузите адрес памяти устройства в регистр? Как получить адрес памяти? Какие ключевые слова в x86 я бы использовал? и т. д. И, к сожалению, в этом случае разработка на Windows будет крайне маловероятной. Если мне удастся в любой форме, я, скорее всего, захочу использовать ее с другим кодом, который я разрабатываю в Unix-системах. – Kevin

+0

Как сказал yetapb, могут быть ограничения безопасности при прямом доступе к порту.Вы можете получить подробную информацию обо всем этом от производителя оборудования. Каждый производитель и большинство моделей, вероятно, будут отличаться. К сожалению, у меня нет примеров из прошлого десятилетия. – xpda

0

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

2

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^