Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев

Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев, страница 8

PDF-файл Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев, страница 8 Архитектура ЭВМ (36554): Семинары - 2 семестрСеминары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев: Архитект2019-04-28СтудИзба

Описание файла

PDF-файл из архива "Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев", который расположен в категории "". Всё это находится в предмете "архитектура эвм" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 8 страницы из PDF

Куда именно будет помещено введенное число, и, какое значение увторого аргумента scanf, зависит от параметра i и не может быть определено только по заданному фрагменту кода.Значения регистров в указанные в условиях моменты времени приведены в таблице. После выполнения второй команды EBP будет указывать на место, где сохранено его прежнее значение. После вычитания ESP переместится на нижнее двойноеслово занятое фреймом функции (верхушка стека).Таблица 3. Значения регистров и адрес размещения переменной.ЗначениеРегистр EBP после команды №20xbfffff18Регистр ESP после команды №40xbffffef0Адрес размещения array0xbfffff00Пример 3-13 ЭксплойтПриведенная функция f и ее ассемблерная реализация содержат ошибки, которыепорождают эксплуатируемую уязвимость.Пусть в момент вызова функции f адрес возврата был размещен в стеке по адресу0xbffdb3cc.

Постройте такой эксплойт, чтобы в результате его обработки функция fвозвращала управление на адрес 0xdeadbeef.52#include <string.h>void f(char *in1, char *in2) {char *ptr;char buf[16];strcpy(buf, in1);strcpy(ptr, in2);}f:pushmovpushsubmovmovmovxormovmovleamovcallmovleamovcallmovxorjneaddpoppopret.L5:callebpebp, espebxesp, 36ebx, dword [ebp+12]eax, dword [gs:20]dword [ebp-8], eaxeax, eaxeax, dword [ebp+8]dword [esp+4], eaxeax, [ebp-28]dword [esp], eaxstrcpydword [esp+4], ebxeax, [ebp-12]dword [esp], eaxstrcpyeax, dword [ebp-8]eax, dword [gs:20].L5esp, 36ebxebp;;;;;;;;;;;;;;;;;;;;;;;;(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)(21)(22)(23)(24)__stack_chk_fail; (25)РешениеКак и в предыдущей задаче, определим, как происходило распределение памятиво фрейме функции.

Помимо всего, компилятор поместил во фрейм функции «канарейку» – контрольное значение, которое будет затираться при переполнениимассива buf (Команды №6-8). Значение «канарейки» проверяется перед выходомиз функции (Команды №18-20). Если «канарейка» изменилась – управление передается на функцию, выполняющую аварийное завершение работы программы.«Канарейка» защищает от изменения адрес возврата, поскольку массив buf расположен ниже (ebp-28). Но указатель ptr расположен также ниже «канарейки» и егозначение может быть изменено в результате переполнения.

Для этого необходимозадать первый параметр в виде строки из 16 произвольных ненулевых байтов (вприведенном решении они выделены курсивом), а затем – адрес 0xbffdb3cc, по которому размещен адрес возврата. Байты адреса, как и любые другие целые числа,следует развернуть в обратном порядке (начиная с младших).

Важно, чтобы сразупосле адреса строка заканчивалась, т. к. в противном случае будет изменено значение «канарейки».53Второй вызов функции strcpy перепишет адрес возврата; в параметре in2 долженбыть задан адрес 0xdeadbeef, на который требуется передать управление. Поскольку других действий предпринимать не требуется, параметр in2 можно этим ограничить.in1ffffffffffin2efbeadde00ffffffffffffffffffffffccb3fdbf00ЗадачиЗадача 3-1В стеке записаны 20 указателей типа char* (последний из указателей находится навершине стека).

Не меняя состояние стека, обнулить значения по данным указателям.Задача 3-2В стеке записано 50 чисел типа int (последнее число находится на вершине стека).а) Среди этих чисел подсчитать количество чисел, имеющих равных «соседей»(предыдущее и последующее числа), и записать ответ в регистр EAX.б) Считая, что числа заносились в стек в порядке x1, x2, …, x50, записать в регистр EAX число 1, если последовательность x1, x2, …, x50 является возрастающей, или 0 в противном случае.54Состояние стека менять не разрешается.Задача 3-3 Максимум двух чиселТребуется реализовать функцию max, соответствующую прототипу intint b), которая возвращает максимальное значение своих параметров.Задача 3-4 Поменять местамиТребуется оформить функцию swap, соответствующую прототипуint *b), которая меняет значения своих аргументов.max(int a,void swap(int *a,Задача 3-5 Восстановить объявление функцииТело Си-функции f имеет следующий вид:*p = d;return x-a;Этому телу соответствует следующий ассемблерный код.movsxmovmovmovsxmovsubmovedx, byte [ebp + 12]eax, dword [ebp + 16]dword [eax], edxeax, byte [ebp + 8]edx, dword [ebp + 20]edx, eaxeax, edxТребуется восстановить прототип функции f.Задача 3-6Реализовать функцию с прототипомдачи:int f(unsigned n)для решения следующей за-а) функция возвращает значение 1, если количество единиц в двоичном представлении числа n превышает количество нулей;б) функция возвращает значение 1, если в двоичном представлении числа nимеется 5 стоящих подряд единиц.Реализация должна удовлетворять соглашению cdecl.Задача 3-7Описать функцию int max(short *a, unsigned n), которая возвращает в качестве результата значение максимального элемента массива a из n элементов.

Функциядолжна удовлетворять соглашению cdecl.55Задача 3-8 ФакториалРеализовать в виде функции вычисление факториала.Задача 3-9 Только рекурсияОписать рекурсивную функцию для решения следующих задач. Функция должнаудовлетворять соглашению cdecl:1. На входном потоке задан текст в виде последовательности символов, заканчивающейся точкой.а) Вывести символы текста в обратном порядке.б) Подсчитать количество вхождений цифр в указанный текст.2. На входном потоке задана последовательность ненулевых чисел типа int(признаком окончания последовательности является число 0).

Вывести сначала все отрицательные числа этой последовательности, а затем все остальные (в любом порядке).3. Для числа unsigned n найти:а) Сумму цифр в его десятичной записи.б) Максимальное значение цифры в его десятичной записи.Задача 3-10 Выравнивание стекаТребуется должным образом оформить функцию CMAIN для последующего вызовафункций стандартной библиотеки.

Необходимо выровнять стек по границе 16 байтов.Задача 3-11 «Сколько время»Требуется напечатать на стандартный вывод текущее время. Пример вывода:Tue Mar 29 23:00:33 2011Указание: воспользуйтесь функциями стандартной библиотеки языка Си:#include <time.h>time_t time(time_t *timer);char *ctime(const time_t *timer);Задача 3-12Реализовать функцию стандартной библиотеки языка Си memcpy в соответствии с соглашением cdecl.void *memcpy(void *destination, const void *source, size_t num);56Функция memcpy не допускает пересечение между областями памяти, указываемыми в source и dest. Примечание: Тип size_t — 32-битное беззнаковое целое.Задача 3-13Реализовать функцию стандартной библиотеки языка Сисоглашением cdecl.memmoveв соответствии сvoid *memmove(void *destination, const void *source, size_t num);Функция memmove допускает пересечение между областями памяти, указываемымив source и dest.Задача 3-14Написать полную программу на языке ассемблера, которая вводит с клавиатурыдва целых числа (int) и выводит:а) максимальное из этих чисел;б) среднее арифметическое этих чисел.Для ввода/вывода использовать функции стандартной библиотеки языка Си: scanfи printf.

Для расположения вводимых чисел использовать стек. Обеспечить выравнивание стека в функции main.Задача 3-15Написать полную программу на языке ассемблера, которая вводит с клавиатурыцелое число (int), вычисляет его абсолютное значение и выводит его. Программадолжна использовать функции стандартной библиотеки языка Си: scanf, abs иprintf. Вводимое число расположить в стеке. Обеспечить выравнивание стека вфункции main. Прототип функции abs имеет вид int abs(int n);Задача 3-16Реализовать функцию strpfx, которая возвращает длину наибольшего общего префикса строк s1 и s2, в соответствии с соглашением cdecl. Строки:а) не могут полностью совпадать;б) могут полностью совпадать.size_t strpfx(const char *s1, const char *s2);Примечание: данная функция не входит в стандартную библиотеку языка Си.57Задача 3-17При компьютерной обработке звука используется дискретное представление звукового сигнала: звук рассматривается как массив дискретных сэмплов (моментальных значений амплитуды), снятых с источника с определённой частотой (частотадискретизации).

Эти значения могут храниться, например, в виде знаковых 8разрядных целых чисел.Таким образом, монофонический звук может быть представлен массивом signedchar *M, где M[i] — значение амплитуды в момент времени i*T, где T — периоддискретизации.Стереофонический звук, как правило, представляется в «переплетённом» (interleaved) формате: в массиве signed char *S чётные элементы соответствуют амплитуде в левом канале, а нечётные — в правом.

Иными словами, для одного и тогоже стереофонического звука, представленного в таком формате и в виде двух монофонических массивов L и R верны соотношения:S[0]S[1]S[2]S[3]...S[i]========L[0];R[0];L[1];R[1];== (i % 2 ? R : L)[i / 2];Требуется реализовать функции преобразования:а) двух монофонических сигналов для левого и правого уха L и R в interleavedstereo S;б) interleaved stereo сигнала S в два монофонических L и R./* Преобразование из L и R в S. Число сэмплов передаётся в n. */voidinterleave(size_t n, const signed char *L, const signed char *R,signed char *S);/* Преобразование из S в L и R. Число сэмплов передаётся в n.voiddeinterleave(size_t n, const signed char *S, signed char *L,signed char *R);*/Задача 3-18C использованием функции стандартной библиотеки языка Си qsort реализуйте:а) функцию с прототипом void sort1(int *x, int n), сортирующую по неубыванию массив x, в котором содержатся n целочисленных значений;58б) функцию с прототипом void sort2(unsigned long long *x, int n), сортирующую по невозрастанию массив x, в котором содержатся n целочисленныхзначений;в) функцию с прототипом void sort3(char **x, int n), сортирующую в лексикографическом порядке массив строк x длины n с использованием библиотечной функции strcmp.Задача 3-19Измените решение Примера 3-9 таким образом, чтобы в теле цикла, выполняющего копирование данных, вместо команды POP использовалась команда PUSH.Задача 3-20Функция g и ее ассемблерная реализация содержат ошибки, которые порождаютэксплуатируемую уязвимость.Пусть в момент вызова функции g адрес возврата был размещен в стеке по адресу0xbfc1d80c.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5259
Авторов
на СтудИзбе
420
Средний доход
с одного платного файла
Обучение Подробнее