Комментарии 8
Чтобы надежно использовать эту уязвимость, нужно между вызовами запрещать прерывания — а это уже выход из песочницы :) Однако, нужно ждать патча рантайма, который будет обнулять регистровые пары перед возвратом из fastcall-метода.
0
А что, собственно, Вы хотели увидеть? Сделайте объекты разной внутренней структуры, с разным количеством полей и разным количеством виртуальных методов — такой фейерверк начнётся, что огого! А если это скрестить с финализатором — так вообще
// удачной отладки!
0
В статье был реализован аналог union С++, который дважды был инициализирован через разные поля. Поскольку типы нетривиальные, то они неизбежно имеют указатель на таблицу методов — vtable. Для стандарте C++ такая ситуация регламентирована чётко: undefined behavior.
Переписывание с адаптацией под синтаксис C# привёл ровно к такому же результату.
Переписывание с адаптацией под синтаксис C# привёл ровно к такому же результату.
+1
А с какого перепугу у нас загрузился тип со взаимным перекрытием двух полей ссылочных типов?
0
5: mov eax, [eax+0x28]
…
Пятая строка содержит сдвиг регистра eax на 40 байт
Сдвиг регистра на IA32/AMD64 осуществляется инструкциями shl
, shr
и им подобными, аналог в языках с си-подобным синтаксисом — <<
, >>
.
В процитированной пятой строке — загрузка значения из памяти по адресу eax + 0x28
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пропихиваем параметры в небезопасные операции в безопасном коде