Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Пояснения: [Unix] ASM 01.02.02 14:08 Число просмотров: 852
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
> Так, кто может объяснить насильнику, что вообще происходит. > Имею простейшубю прорамульку: > .globl main > main: > ret > > Собираю gcc t1.s > OK. Усе работает. Размер файла (внимание) 3898 байт !!! Не > многовато л и ?
Нет не мнгогвато - запускач разбирает командную строку и окружение,
настраивает адреса на резидентную библиотеку, инициализирует
стэк, "кучу" памяти, запоминает время начала выполнения программы
для определенных библиотечных функций.
> Пусть мой ret занимает один байт, на что тратятся остальные > 3897 ? Ладно, будем считать, что линкер загнал мне всю > рантайм библиотеку в приложение + добавил потдержку окон, > фтп, и джава машину (подарочек типа). Но как тогда понять > слова, что gcc является крутым, оптимизирующим компилером, > на котором можно делать ядро ? Это не наезд, я просто хочу > понять.
В этом случае выполняемый файл может и мегабайтный размер иметь.
> Вариант два: as -o t1.0 t1.s > ld -e main t1.o
В данном случае в выполняемом модуле кроме одного байта кода
еще и заголовок прописан. Даже в ДОСе екзешка из одного байта кода
далеко не один байт на диске занимает.
> Размер 673 (уже получше). Но, Сегментейшен фаулт, однако. > Почему ? Точку входа задал, выхожу ret'ом... что ему не > хватает ?
Ты не точку входа задал, а глобальную переменную.
Интересно куда ты retом в этом случае вернуться хочешь,
запускателя уже нет, да и стэк пуст, адресное пространство
затачи - 1 байт - в любом случае сегментэишн зафаултится.
> Чем вообще происходит вызов моего кода call или jmp ? Если
В случае С программы обращение к main через call, а в данном
случае переключением контекста.
> call, то вроде мой рет уместен, если джампом, то как мне > сообщить ядру, что я завершился ?
Даже в ДОСе интерраптом нормально процесс завершается.
INT 20 или INT 21 при AH=0
Иначе к системе не обратиться, она в другом адресном пространстве,
а переключение контекста только интерраптом.
> Вроде вопросы понятны. Надеюсь на ответы по существу. > Сенькс.
|
|
|