Как ассемблер взаимодействует с чем-то как Интернет?

Таким образом, я думал о языках на днях, и это ударило меня, что любая программа, записанная на скомпилированном языке, который взаимодействует с Интернетом, затем переводится в блок, который должен взаимодействовать с Интернетом. Я только что начал изучать немного x86 блока, чтобы помочь мне понять C++ немного лучше, и я экранирован тем, как что-то таким образом низкий уровень могло сделать что-то как доступ Интернет.

Я уверен, что полный ответ на этот вопрос намного больше, чем вписался бы ТАК ответ, но кто-то мог дать мне, возможно, основную сводку?

5
задан Maulrus 12 April 2010 в 01:55
поделиться

3 ответа

Программы пользовательского пространства, которые «взаимодействуют с Интернетом» во всех современных системах, делают это путем выдачи системных вызовов базовой операционной системе, которая предоставляет API для стека TCP / IP.

Рассматриваемые системные вызовы (такие как socket , listen , accept и т. Д.) Обычно документируются на уровне C, но в каждом конкретную реализацию ОС они, конечно же, переведут в машинный код. Но то, идут ли значения в определенные регистры или места в памяти, на которые указывают определенные регистры и т. Д., Довольно второстепенно и полностью зависит от системы.

Если вам интересно, как машинный код (вероятно, также скомпилированный из C) в ядре и драйверах устройств «взаимодействует с Интернетом» (в ответ на системные вызовы), он делает это, создавая и поддерживая в памяти структуры данных для отслеживания состояния различных вещей и путем взаимодействия с базовым оборудованием (например, через прерывания, порты ввода-вывода, области устройств с отображением памяти или что-то еще, что использует эта конкретная архитектура) - точно так же, как он взаимодействует (скажем) с видеодисплей или дисковое устройство.

12
ответ дан 18 December 2019 в 13:12
поделиться

Что вам нужно сделать, так это найти некоторые из этих проектов веб-серверов PIC. Некоторые из них представляют собой веб-серверы, написанные на сборке и работающие на 8-битном оборудовании. Это даст вам четкое представление о том, как нечто столь же низкоуровневое, как сборка, может быть использовано для взаимодействия с остальным миром через Интернет.

Это в основном включает

  1. Написание некоторых низкоуровневых драйверов (уровень 2) для взаимодействия с сетевым оборудованием - это может быть использование Ethernet или даже модемов (с SLIP).
  2. Запишите следующие уровни - IP и TCP - для обработки пакетов TCP / IP. Для этого потребуется некоторая магия сборки, поскольку эти процессы довольно сложны.
  3. Напишите уровень приложения - будь то веб-сервер, клиент или что-то еще - которое использует нижележащие уровни.

Надеюсь, это развеет некоторые сомнения.

0
ответ дан 18 December 2019 в 13:12
поделиться

Это зависит от обстоятельств. Когда вы читаете о веб-скрипте, написанном на C, на самом деле это программа CGI. CGI - это протокол, а не язык. CGI указывает, что нужно поместить «GET», «POST» и т. Д.в REQUEST_METHOD, «foo = bar? baz = 42» в QUERY_STRING, отправлять данные в стандартный ввод и т. д. Для доступа к ним программа CGI использует системные вызовы. Веб-сервер использует CGI для связи с веб-сценарием. Программа, которая сама обменивается данными через Интернет, может использовать API системных сокетов.

Таким образом, операционная система делает все, что связано с обменом данными. Программа просто выполняет правильные системные вызовы.

Если вам интересно, как операционная система обменивается данными через Интернет, ответ заключается в том, что ядро ​​ОС использует драйвер для взаимодействия с сетевой картой через порт ввода-вывода, ввод-вывод с отображением памяти и т. Д. ОС и сетевая карта реализуют Стандарты интернет-протокола для совместной работы всего.

2
ответ дан 18 December 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: