Спасибо за видос! Познакомился с harmony, когда делал мод для RimWorld. Собственно эту либу часто используют для модов в играх на Unity. Однако, в своих проектах не рекомендую использовать эту либу, юзер всегда найдет калькулятор, на котором все крашнет, а сервер упадет при обнове. А вот тесты - отличный кейс. Спасибо автору за просвещение!
Я вот разрабатывал 15 лет и теперь менеджер, уже года 3. Смотрю эти нежные срачи с базерами и кишки CLR и слёзы счастья и ностальгии 🥲 наворачиваются на глаза. Спасибо огромное!
Интересные совпадения в моей жизни. Начал недавно трогать АОП и тут ты видео выпускаешь). Не в первый раз тема которую я начинаю трогать совпадает с видео которое ты выпускаешь
Блин, кто то заморачивается с инжектом двухфакторной аутентификацией в конекшен к базе, а кто то даже пароли не хэширует и в добавок еще и базу умудряются слить П.С. Видео очень интресное, хоть и мало применимо в реальной жизни
Было бы классно послушать от тебя про всю асинхронность и многопоточность. Как работает/где использовать/где не использовать. Как работать с блокировками, когда их применять, примитивы разобрать. Хотябы поверхностно по этому всему пройтись, без стейт машин и ассемблера. Я смотрел твой стрим про развитие асинхронной модели, но это не совсем то. Очень не хватает понятного туториала по всем этим вещам, а ведь это одна из главных фишек шарпа, все остальные по крупицам рассказывают и влезают в дебри ассемблера с IL.
Да... Я думаю как это лучше сделать. Два захода уже были, но оба не совсем туда, да и не сказать, что хорошо вышли Пока не придумал как именно это рассказать лучше
У нас тут производственная проблема - MS сделала одну каку - создала публичный класс с internal конструктором. А нам ой как хочется от него отнаследоваться. Мы сейчас ведём холивар с MS по этому поводу, но это история долгая, а хочется уже сейчас. И в контексте этого стрима показалось, что можно рассмотреннными методами достичь желаемого. Так вот вопрос - а можно ли? И лучше так, чтобы извне это не было заметно, т.е. наш класс выглядел как наследник этого хитро-запечатанного.
Если честно, именно в случае наследования не приходилось обходить.... Тут может можно где-то подменить создание и обернуть исходный класс в ваш реализуя тот же интерфейс?..
видос отличный, но не совсем понял часть с аутентификацией с базой. это что-то типа распределенных серверов, где база лежит в одном месте, а бэк в другом/других?
привет! попробовал повторить в домашних условиях, всё получилось, но если попробовать поменять Console.WriteLine выдаёт ошибку System.AccessViolationException. Может есть способы решения проблемы ? код прикладываю ниже public class Parogram { static void Main(string[] args) { Console.WriteLine("Stupid old console.."); DoSomeScaryShit(); Console.ReadLine(); } public static void DoSomeScaryShit() { var source = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }); var dest = typeof(A2).GetMethod("MyWriteLine"); IllifalOverride(source, dest); Console.WriteLine("New Console works!"); } private static unsafe void IllifalOverride(MethodBase source, MethodBase dest) { var fp1 = source.MethodHandle.GetFunctionPointer(); var fp2 = dest.MethodHandle.GetFunctionPointer(); //проджитим это дело RuntimeHelpers.PrepareMethod(source.MethodHandle); RuntimeHelpers.PrepareMethod(dest.MethodHandle); var f1Ptr = (byte*)fp1.ToPointer(); var f2Ptr = (byte*)fp2.ToPointer(); var sJump = (uint)f1Ptr + 1 + 4; *(uint*)(f1Ptr + 1) = (uint)(f2Ptr - sJump); } } public class A2 { public static void MyWriteLine(string message) { Console.Write(message + ' '); } }
Там хватает каких-то разных мелких нюансов. Можно попробовать вот этот метод или покурить исходники Harmony: github.com/pardeike/Harmony/blob/bb0fa4f9f792195daa54adc181543c1c65d72bf3/Harmony/Internal/Memory.cs#L32
Спасибо за видос! Познакомился с harmony, когда делал мод для RimWorld. Собственно эту либу часто используют для модов в играх на Unity. Однако, в своих проектах не рекомендую использовать эту либу, юзер всегда найдет калькулятор, на котором все крашнет, а сервер упадет при обнове. А вот тесты - отличный кейс. Спасибо автору за просвещение!
Я вот разрабатывал 15 лет и теперь менеджер, уже года 3. Смотрю эти нежные срачи с базерами и кишки CLR и слёзы счастья и ностальгии 🥲 наворачиваются на глаза. Спасибо огромное!
Интересные совпадения в моей жизни. Начал недавно трогать АОП и тут ты видео выпускаешь). Не в первый раз тема которую я начинаю трогать совпадает с видео которое ты выпускаешь
Ахах))
Все очень просто: используя техники из этого видео я переопредил твой процесс мышления))
@@DevJungles ну надеюсь в прод я это не потащу)) пока что..
Блин, кто то заморачивается с инжектом двухфакторной аутентификацией в конекшен к базе, а кто то даже пароли не хэширует и в добавок еще и базу умудряются слить
П.С. Видео очень интресное, хоть и мало применимо в реальной жизни
Не то что бы совсем неприменимо, но скорее используется внутри либ)
Если бы еще шрифт был побольше, вообще огонь было бы. А то выколи глаз)). Спасибо за видео.
Заметано))
🙂🙂🤨🤨😮😮😲😲
Ты играешь в C++ на C#?
Ахаха)
Хорошо сказал!)
Было бы классно послушать от тебя про всю асинхронность и многопоточность. Как работает/где использовать/где не использовать. Как работать с блокировками, когда их применять, примитивы разобрать. Хотябы поверхностно по этому всему пройтись, без стейт машин и ассемблера. Я смотрел твой стрим про развитие асинхронной модели, но это не совсем то. Очень не хватает понятного туториала по всем этим вещам, а ведь это одна из главных фишек шарпа, все остальные по крупицам рассказывают и влезают в дебри ассемблера с IL.
Да...
Я думаю как это лучше сделать.
Два захода уже были, но оба не совсем туда, да и не сказать, что хорошо вышли
Пока не придумал как именно это рассказать лучше
Лайк влипил
Хороший пример, но использовать такое в проде категорически нельзя. Разве только для исследований :)
Главное не показывайте это менеджерам
У нас тут производственная проблема - MS сделала одну каку - создала публичный класс с internal конструктором. А нам ой как хочется от него отнаследоваться. Мы сейчас ведём холивар с MS по этому поводу, но это история долгая, а хочется уже сейчас. И в контексте этого стрима показалось, что можно рассмотреннными методами достичь желаемого. Так вот вопрос - а можно ли? И лучше так, чтобы извне это не было заметно, т.е. наш класс выглядел как наследник этого хитро-запечатанного.
Если честно, именно в случае наследования не приходилось обходить....
Тут может можно где-то подменить создание и обернуть исходный класс в ваш реализуя тот же интерфейс?..
видос отличный, но не совсем понял часть с аутентификацией с базой. это что-то типа распределенных серверов, где база лежит в одном месте, а бэк в другом/других?
Да без разницы в общем-то.
Тут ребята хотели сотворить дополнительный слой защиты, там, где он не предусмотрен.
А это работает в линукс докер образе?
Да
Тут никаких завязок на ОС
А расширение для SSMS тоже было на C# ?
Да)
привет! попробовал повторить в домашних условиях, всё получилось, но если попробовать поменять Console.WriteLine выдаёт ошибку System.AccessViolationException. Может есть способы решения проблемы ? код прикладываю ниже
public class Parogram
{
static void Main(string[] args)
{
Console.WriteLine("Stupid old console..");
DoSomeScaryShit();
Console.ReadLine();
}
public static void DoSomeScaryShit()
{
var source = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) });
var dest = typeof(A2).GetMethod("MyWriteLine");
IllifalOverride(source, dest);
Console.WriteLine("New Console works!");
}
private static unsafe void IllifalOverride(MethodBase source, MethodBase dest)
{
var fp1 = source.MethodHandle.GetFunctionPointer();
var fp2 = dest.MethodHandle.GetFunctionPointer();
//проджитим это дело
RuntimeHelpers.PrepareMethod(source.MethodHandle);
RuntimeHelpers.PrepareMethod(dest.MethodHandle);
var f1Ptr = (byte*)fp1.ToPointer();
var f2Ptr = (byte*)fp2.ToPointer();
var sJump = (uint)f1Ptr + 1 + 4;
*(uint*)(f1Ptr + 1) = (uint)(f2Ptr - sJump);
}
}
public class A2
{
public static void MyWriteLine(string message)
{
Console.Write(message + '
');
}
}
Там хватает каких-то разных мелких нюансов.
Можно попробовать вот этот метод или покурить исходники Harmony: github.com/pardeike/Harmony/blob/bb0fa4f9f792195daa54adc181543c1c65d72bf3/Harmony/Internal/Memory.cs#L32