LINUX.ORG.RU

syscall gate aka 'int 0x80'


0

0

Собственно, начал немного писать на асме под бсд, и вот стало интерестно, что это за вещь такая int 0x80 ?

Допустим такой код:

push len
push msg
push 1
mov eax,4
push eax
int 0x80

Что происходит, когда выполняется int ? ведь это НЕ инструкция проца ? это, что call куда-то... куда ?

Если кто знает может подскажете?

anonymous

> Что происходит, когда выполняется int ? ведь это НЕ инструкция проца ?

почему не инструкция? инструкция. Происходит прерывание. В векторе прерываний -- таблице -- ищется точка входа, туда передается управление

на стек обычно помещается больше информации, чем при обычном call; слово состояния процессора например

dilmah ★★★★★
()

1) таким образом управление передается ядру.под Linux сейчас кошерно lcall на VSYSCALL_PAGE вместо прямого вызова int $0x80 (механизм, считающийся устаревшим) или sysenter.

2)это инструкция проца 3)за подробностями в google и на intel.com

anonymous
()

-----------------
1) таким образом управление передается ядру.под Linux сейчас кошерно lcall на VSYSCALL_PAGE вместо прямого вызова int $0x80 (механизм, считающийся устаревшим) или sysenter
-----------------

а "lcall на VSYSCALL_PAGE" так же использовать - т.е. параметры в стек, номер сискола в еах ? и в каком файлике можно найти значение
VSYSCALL_PAGE ?

anonymous
()
Ответ на: комментарий от anonymous

1) нет, это не BSD. параметры кладутся в регистры.eax = номер системного вызова,ebx ecx edx edi esi - параметры.подробнее см в arch/<..>/kernel/entry.S 2)grep по исходникам ядра на предмет VSYSCALL_PAGE уже отменили?

anonymous
()
Ответ на: комментарий от anonymous

> 1) нет, это не BSD. параметры кладутся в регистры.eax = номер системного вызова,ebx ecx edx edi esi - параметры.подробнее см в arch/<..>/kernel/entry.S

это в linux'е так. в bsd же параметры как раз через стек передаются.

beastie ★★★★★
()
Ответ на: комментарий от dilmah

>Происходит прерывание.

не прерывание, а ловушка, прерываться нечему. прерывания могут быть только от внешних устройств.

anonymous
()
Ответ на: комментарий от dilmah

> В векторе прерываний

В IDT. Код явно для защищенного режима.

anonymous
()
Ответ на: комментарий от anonymous

> не прерывание, а ловушка, прерываться нечему

когда-то давно, хакеры были разбиты на 2 лагеря -- ямаховцы и БК-шчники. Ловушка -- это терминология ямаховцев:)

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Ловушка - как раз терминология БК-шников. Там все прерывания trap'ами были. И инструкция там эта выглядела как EMT. На ямахе использовался процессор z80, и прерывания были названы рестартами, соответственно мнемоника инструкции была RST.

На IA32 архитектуре это именно прерывания. Просто большинство процессоров имееют инструкцию для его программного вызова, также прерывания на этой архитектуре могут генерировать не только внешние по отношению к процессору устройства, но и он сам, конкретно его MMU, и такое прерывание называется "исключение" (exception). Что там на обработчик прерывания повешано в качестве ISR - шлюз задачи, шлюз вызова, ловушка - дело десятое. Ловушка на IA32 архитектуре просто обрабатывается немного по другому.

anonymous
()
Ответ на: комментарий от anonymous

>На IA32 архитектуре это именно прерывания. >Что там на обработчик прерывания повешано в качестве ISR - шлюз задачи, >шлюз вызова, ловушка - дело десятое.

Как раз на x86 это ловушка. А то, что это вызывается инструкцией intr, не имеет никакого значения, поскольку прерывания процессора не происходит, а он выполняет код, который и должен был. Термин ISR вы тоже используете неверно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.