Size: a a a

2021 March 08

КП

Котеечко Пухнастиньк... in SPbCTF
ну и кстати, оптимизация может нахуевертить
источник

КП

Котеечко Пухнастиньк... in SPbCTF
typedef asmlinkage u_int64_t volatile (*func)(void *, ...);
источник

КП

Котеечко Пухнастиньк... in SPbCTF
так что требую ачивку))
источник

КП

Котеечко Пухнастиньк... in SPbCTF
у меня кстати был прикол с оптимизацией вообще на гране фантастики
источник

VR

Vlad Roskov in SPbCTF
    size_t (*F)(size_t, ...) = (void *)func;
   
   printk("lol=%d\n", F(3, 5, 4));
источник

y

y0urR1ddle6 in SPbCTF
Котеечко Пухнастиньке
typedef asmlinkage u_int64_t volatile (*func)(void *, ...);
как это вообще работает
источник

VR

Vlad Roskov in SPbCTF
вот так получилось
источник

VR

Vlad Roskov in SPbCTF
но это ± костыль, потому что для 0 аргументов не работает
источник

КП

Котеечко Пухнастиньк... in SPbCTF
Vlad Roskov
    size_t (*F)(size_t, ...) = (void *)func;
   
   printk("lol=%d\n", F(3, 5, 4));
так а это уже тоже самое)
источник

VR

Vlad Roskov in SPbCTF
а, ну да
источник

КП

Котеечко Пухнастиньк... in SPbCTF
NULL
источник

КП

Котеечко Пухнастиньк... in SPbCTF
для 0 аргументов
источник

КП

Котеечко Пухнастиньк... in SPbCTF
NULL
источник

VR

Vlad Roskov in SPbCTF
ну не совсем, это тэинтит rdi)))
источник

КП

Котеечко Пухнастиньк... in SPbCTF
ответная функция просто проигнорирует регистры
источник

КП

Котеечко Пухнастиньк... in SPbCTF
y0urR1ddle6
как это вообще работает
ну тайпдеф объявит тип
асмлинкейдж добавит атрибут для линковщика
volatile это что-то типа const но чуть иначе работает.
источник

КП

Котеечко Пухнастиньк... in SPbCTF
тип возвращаемого значения - 64 битный беззнаковый инт инт
источник

КП

Котеечко Пухнастиньк... in SPbCTF
то есть rax
источник

КП

Котеечко Пухнастиньк... in SPbCTF
а дальше наборы регистров ничем не ограниченных
источник

КП

Котеечко Пухнастиньк... in SPbCTF
rdi, rsi, rdx, rcx
источник