- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
void trampoline(void (*func)(void), bool flag)
{
if (flag)
func();
else
trampoline(func, true);
}
int
main(int argc, char *argv[])
{
/*... */
trampoline(set_aes_keys, false);
}
З.Ы. А у этого трамплина только одна реализация? Или есть какая-то другая под #ifdef'ом?
Там хуйня типа:
Смысл трамплина остаётся неясным.
Meltdown это когда ты тренишь предиктор чтобы он выполнил левый код, который считает данные в кеш, и потом замеряешь скорость чтения с кеша
Типа кококо-защита от реверсинга, но похоже что хуита.
>З.Ы. А у этого трамплина только одна реализация? Или есть какая-то другая под #ifdef'ом?
Только одна.
Тащемта, похоже что ЭТО надо выжечь калёным железом.
Ололо
ps что с гк творится? почему 500е постоянно?
неужели задрочили самопальными приблудами и бесконечными стоками?
Сам токошто гневный комент пейсал, так ГКшный эксепшен его скушал.
Так учил Фредерик Брукс в 1963 г.
Вангую что в темные века между 386 (когда стало можно адресоваться по sp) и, примерно, 2006 годом, им никто не пользовался ибо frame pointer omition
Ой да ладно, конпелятору не так уж и сложно трекать сколько байт он наклал на стек... Единственный случай, где FPO реально не заюзать -- функция с alloca.
З.Ы. А в 16-битном коде об SP нельзя было адресоваться, так что там BP без вариантов и никакого FPO.
З.Ы. Разве что въебать 67h, нагло заюзать [esp] прямо из 16-битного кода и молиться, чтобы никто не насрал в старшую половину esp. Всё равно чистых 8086 в природе уже нет.
На некоторых прошивках видно, что после вызова "реалмодного" прерывания меняется IDTR. Т.е. CSM иногда зачем-то бегает в защищёнку и есть риск, что он и старшие части регистров хуёво сохранит и помнёт.
Нахуй и в пизду, короче. Разве что под CLI и с обнулением прямо перед использованием...
именно тем и руководствовались питухи, когда выпиливали frame pointer.
А потом без символов стек не прочитать
>>А в 16-битном коде об SP нельзя было адресоваться,
даже на совр. процах?
З.Ы. Лол, оказывается даже суперкомпьютер с 65536 однобитных процессоров был...
Там для большинства задач даже переходы нинужны были. Команды тупо исполнялись по кругу. Зато инженерам не надо было учиться программировать, они брали схему на реле и дословно переносили её на асм этого контроллера.
?
foo 2, 2
->
foo 4
неужто нет ключ слова у копелятора?
>>З.Ы. А у этого трамплина только одна реализация?
конечно, есть еще и такая
void trampoline(void (*func)(void), bool flag)
{
if (flag)
func();
else
trampoline(func, false);
}
ахахахахах
Сперва прочитал как traponline
Ты пишешь под браузер или только под ноду?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Browser_compatibility
Но у нас всё равно Бабель, может быть для let или import
foo + bar это обычно foo[bar]
Идеи кастов в JS ещё можно понять: удобно, когда пишешь "form.y.value = form.x.value * 10" и не отвлекаешься на преобразования.
Но это перемешивание индексов - какая-то питушня. "Вдруг программист случайно перепутает массив и индекс - с кем не бывает - а наш язык ему поможет".
Эта питушня наверное походит еще со времен, когда С считался непозволительной роскошью из-за оверхеда над ASM.
> "Вдруг программист случайно перепутает массив и индекс - с кем не бывает - а наш язык ему поможет".
Скорее мысль была такая "в случае x[y] заменяем и интерпретируем как *(x + y) ибо надо сэкономить пару байт кода компилятора"