OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 04:15

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Си: строка как машинный код
СообщениеДобавлено: Четверг, 20 Январь, 2011 09:27 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
В Реддите наткнулся на упоминание такого забавного кода:
Код:
#include <stdio.h>
void(*swap)() = (void(*)()) "\x8b\x44\x24\x04\x8b\x5c\x24\x08\x8b\x00\x8b\x1b\x31\xc3\x31\xd8\x31\xc3\x8b\x4c\x24\x04\x89\x01\x8b\x4c\x24\x08\x89\x19\xc3"
"Oh, there you are Mr. Insanity...";

int main(){ // works on GCC 3+4
   int a = 37, b = 13;
   swap(&a, &b);

   printf("%d%d",a,b);
}

// TIL: If you do this at work, you'll probably be fired

Самое смешное -- работает! По крайней мере, компилятор TinyC выполняет этот код -- значения переменных a и b меняются местами.
Вот уж простор для багов... :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си: строка как машинный код
СообщениеДобавлено: Четверг, 20 Январь, 2011 10:37 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Дык не особо и новость...
У нас FastMathParse так работает. Просто MathParse - тот по честному парсит текст формулы, и считает. А Fast - тот при загрузке новой формулы, делает именно такую "строку".

И тоже ведь работает :)
Не сами придумали - где-то в инете примерчики были про "супербыстрый калькулятор".
И тоже на C, естественно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си: строка как машинный код
СообщениеДобавлено: Четверг, 20 Январь, 2011 20:32 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Проверил с включенной опцией DEP (Data Execution Prevention) -- система стала блокировать эту программку.
Так что Ваш FastMathParse у меня уже не запустится. :lol:
Вы бы доработали его так, что бы он сохранял скомпилированный код в файл и запускал из файла -- надёжнее и безопаснее...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си: строка как машинный код
СообщениеДобавлено: Четверг, 20 Январь, 2011 20:34 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Надо на страницу памяти проставлять разрешение на выполнение...
Винда раньше относилась либерально - если чтение проставлено, то можно и выполнить.

В Линуксе в ядре 2.4 - тоже. А в 2.6 уже требоваться стало. Ввиду этого определённые нюансы в ядре ББ тогда пришлось править.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си: строка как машинный код
СообщениеДобавлено: Четверг, 20 Январь, 2011 20:45 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Geniepro писал(а):
Проверил с включенной опцией DEP (Data Execution Prevention)
Хм..
А при чем здесь Вы ???
Разве флаги, аллоцированных "мною" блоков памяти для хипа - "Вы" определяете, а не "я"

Типа: я Вас не понял...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си: строка как машинный код
СообщениеДобавлено: Четверг, 20 Январь, 2011 21:15 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Диспетчер кучи запрашивает для себя у ОС страницы (VirtualAlloc) с флагом на чтение-запись.
Винда всегда разрешала и выполнение данных как кода на таких страницах (т.е. просто плевала на отсутствие флага "исполнение").
Но с какой-то версии Винды (с ХР?) появилась галочка, которой пользователь указывает операционной системе не разрешать такое выполнение. Что, разумеется, приводит к неработоспособности тех программ, которые не используют флаг "разрешить выполнение".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си: строка как машинный код
СообщениеДобавлено: Четверг, 20 Январь, 2011 21:42 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Ну да. И вроде как, действительно - с XP...
Но это же следствие действий разработчика, а не манипуляций пользователя на целевой платформе.
Мне казалось


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си: строка как машинный код
СообщениеДобавлено: Четверг, 20 Январь, 2011 21:48 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Так что, этот DEP элементарно отключается? Тогда какой вообще смысл в этой защите? Думаешь, что защита есть, а её на самом деле и нет вовсе... Вапще всё ужасно...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB