The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск языка программирования Rust 1.57, opennews (??), 02-Дек-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


19. "Выпуск языка программирования Rust 1.57"  –1 +/
Сообщение от Аноним (19), 02-Дек-21, 22:49 
Посоветуйте антивирус на Расте
Ответить | Правка | Наверх | Cообщить модератору

32. "Выпуск языка программирования Rust 1.57"  –1 +/
Сообщение от Аноним (32), 03-Дек-21, 00:07 
В касперском его вроде использовали, но по-моему в их безопасной ОСОБО, а не в самом антивирусе
Ответить | Правка | Наверх | Cообщить модератору

39. "Выпуск языка программирования Rust 1.57"  +6 +/
Сообщение от Led (ok), 03-Дек-21, 00:29 
новичо^Wспутник5
Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

50. "Выпуск языка программирования Rust 1.57"  –4 +/
Сообщение от Аноним (348), 03-Дек-21, 01:11 
Раст признан технологией двойного назначения и запрещён к экспорту в недемократические страны?
Ответить | Правка | Наверх | Cообщить модератору

121. "Драйвер на Rust "  +/
Сообщение от n00by (ok), 03-Дек-21, 09:23 
Для современного антивируса обязателен драйвер. В Венде для использования произвольного языка не надо преодолевать формальности в виде пальца Линуса.

Нашёл достаточно простой пример драйвера. devrandom driver sample which has been ported to Rust.
https://github.com/pravic/winapi-kmd-rs/blob/master/examples...

Оригинал на Си++ https://github.com/pravic/ontl/blob/master/samples/devrandom...
несколько больше по размеру, за счёт дополнительного функционала. Но интересно не это, а безопасная работа с памятью.

Вариант на небезопасном Си++ использует механизм структурной обработки исключений, если указатель Buffer адресует навалидный адрес, функция завершится корректно со статусом status::data_error.


ntstatus RandomData(void* Buffer, uint32_t Length)
{
  int64_t seed;
  KeQueryTickCount(seed);
  __try{
    uint32_t* data = reinterpret_cast<uint32_t*>(Buffer);
    for(uint32_t i = 0; i < Length / 4; i++)
      data[i] = RtlRandom((uint32_t*)&seed);
    if(Length % 4){
      uint32_t r = RtlRandom((uint32_t*)&seed);
      std::memcpy(&data[Length/4], &r, Length % 4);
    }
  }__except(efilter(exception_info(), __FUNCTION__)){
    return status::data_error;
  }
  return status::success;
}

Вопрос к знатокам: упадёт ли аналог в синьку, или Rust неявно использует SEH, или как-то иначе гарантируется валидность адреса?

// RtlRandom: Random number generator based on MacLaren and Marsaglia.
// RtlRandomEx is twice as fast and produces better random numbers
// since the period of the random numbers generated is comparatively higher.
fn GenerateRandom(buffer: PVOID, size: usize) -> Result<usize> {
    let mut seed = km::time::QueryTickCount() as u32;
    let data = buffer as *mut u32;
    let dwords = size / 4;
    let tail = size % 4;
    KdPrint!("[rs] generate random for %d bytes as %d words and %d padding\n", size as u32, dwords as u32, tail as u32);
    unsafe {
        let mut i = 0;
        while i < dwords {
            let word = km::rtl::RtlRandomEx(&mut seed);
            *data.offset(i as isize) = word;
            i += 1;
        }
        if tail != 0 {
            let word = km::rtl::RtlRandomEx(&mut seed);
            km::crt::memcpy(data.offset(dwords as isize) as *mut u8, &word as *const u32 as *const u8, tail);
        }
    }
    KdPrint!("[rs] generate complete\n");
    return Ok(size);
}

Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

201. "Драйвер на Rust "  +1 +/
Сообщение от _hide_ (ok), 03-Дек-21, 12:34 
И в чем же его безопасность в этом примере? Просто до сих пор не понял, зачем себе яйца тисками зажимать?
Ответить | Правка | Наверх | Cообщить модератору

240. "Драйвер на Rust "  +1 +/
Сообщение от Аноним (53), 03-Дек-21, 15:47 
Редокс безопасно течёт, FF безопасно падает, драйвер на расте безопасно выводит "хеловорд!".
Ответить | Правка | Наверх | Cообщить модератору

343. "Драйвер на Rust "  +/
Сообщение от n00by (ok), 04-Дек-21, 08:26 
Сам по себе этот драйвер примечателен уже тем, что он есть. То есть без особого шума (как при попытке протащить Rust в Linux) автор создал библиотечку и написал к ней пример (угу, по традиции портировал пример аналогичной Си++ библиотеки). Но как раз по безопасности есть вопросы, на которые пока нет ответов.
Ответить | Правка | Наверх | Cообщить модератору

342. "Драйвер на Rust "  +1 +/
Сообщение от n00by (ok), 04-Дек-21, 08:19 
Если вопрос про безопасность Rust, то как раз это и интересно.

Обе функции получают в качестве параметра указатель, адресующий пространство пользователя. Если данному адресу не сопоставлена физическая страница ОЗУ, при обращения (запись результата) из ядра генерируется исключение. Если его не обработать должным образом, система покажет BSOD (синий экран смерти). Что делает возможным атаку вида "отказ в обслуживании". Вариант на Си++ использует SEH (конструкция __try __except) и обрабатывает такой случай, юзерленд получит код ошибки. Что в аналогичном сценарии произойдёт с драйвером на Rust, хотелось бы узнать.

Ответить | Правка | К родителю #201 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру