- 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
#include <stdio.h>
#include <stdint.h>
int main(void)
{
bool a = 0;
*((uint8_t*)&a) = 2;
if(!a)
printf("a false\n");
else
printf("a true\n");
return 0;
}
------
.LC1:
.string "a true"
main:
push rax
mov edi, OFFSET FLAT:.LC1
call puts
xor eax, eax
pop rdx
ret
digitalEugene 15.02.2022 15:54 # 0
bormand 19.02.2022 23:34 # 0
Можно поинтересоваться, откуда такие ожидания?
kcalbCube 21.02.2022 06:57 # 0
bormand 15.02.2022 16:50 # +5
UB на самом деле, эта хуйня с мусором в булеане на практике может настолько снести крышу, что у тебя true && true == false получится.
Ибо конпеляторы обычно генерят битовый & вместо булевого &&. Засунул туда через жопу что-то кроме 0 или 1 -- ССЗБ.
guest6 15.02.2022 16:54 # 0
bormand 15.02.2022 16:55 # +2
guest6 15.02.2022 16:59 # 0
MPA3b 15.02.2022 17:26 # +1
Удивительный случай случился со мной: я
вдруг забыл, что идет раньше — 7 или 8.
Я отправился к соседям и спросил их, что
они думают по этому поводу.
Каково же было их и мое удивление, когда
они вдруг обнаружили, что тоже не могут
вспомнить порядок счета. 1,2,3,4,5 и 6 по-
мнят, а дальше забыли.
Мы все пошли в комерческий магазин «Гас-
троном», что на углу Знаменской и Бассейной
улицы, и спросили кассиршу о нашем недоуме-
нии. Кассирша грустно улыбнулась, вынула изо
рта маленький молоточек и, слегка подвигав
носом, сказала:
— По-моему, семь идет после восьми в том
случае, когда восемь идет после семи.
Мы поблагодарили кассиршу и с радостью
выбежали из магазина. Но тут, вдумываясь в
слова кассирши, мы опять приуныли, так как
ее слова показались нам лишенными всякого
смысла.
Что нам было делать? Мы пошли в Летний
сад и стали там считать деревья. Но дойдя в
счете до 6-ти, мы остановились и начали спо-
рить: по мнению одних дальше следовало 7, по
мнению других — 8.
Мы спорили бы очень долго, но, по сча-
стию, тут со скамейки свалился какой-то ребе-
нок и сломал себе обе челюсти. Это отвлекло
нас от нашего спора.
А потом мы разошлись по домам.
12 нояб<ря> 1935.
guest6 15.02.2022 19:09 # 0
скочил из окошка на улицу и напугал всех,
кто проходил в это время по улице. Крестья-
нин Харитон остановился, поднял камень и пу-
стил им в Тимофея. Тимофей куда-то исчез.
«Вот ловкач!» — закричало человеческое
стадо, и некто Зубов разбежался и со всего
маху двинулся головой о стенку.
«Эх!» — вскрикнула баба с флюсом. Но Ко-
маров сделал этой бабе тепель-тапель, и баба
с воем убежала в подворотню.
Мимо шел Фетелюшин и посмеивался. К нему
подошел Комаров и сказал: «Эй ты, сало!» —
и ударил Фетелюшина по животу. Фетелюшин
прислонился к стене и начал икать.
Ромашкин плевался сверху из окна, стара-
ясь попасть в Фетелюшина. Тут же невдалеке
носатая баба била корытом своего ребенка. А
молодая толстенькая мать терла хорошенькую
девочку лицом о кирпичную стенку.
Маленькая собачка, сломав тоненькую нож-
ку, валялась на панели.
Маленький мальчик ел из плевательницы
какую-то гадость.
У бакалейного магазина стояла очередь за
сахаром. Бабы громко ругались и толкали друг
друга кошелками.
Крестьянин Харитон, напившись денатурата,
стоял перед бабами с растегнутыми штанами и
произносил нехорошие слова.
Таким образом начинался хороший летний день.
ucnaHckuu_CTblD 15.02.2022 22:42 # 0
OPAHrymaH 18.02.2022 19:29 # 0
Вижуалбарсик и Дотнет в качестве true используют минус единицу (все биты установлены), причём значение может занимать два или четыре байта.
Об этом нужно помнить при реализации протоколов обмена информацией: сырые булевы значения никуда не отправлять и ни откуда не принимать, а конвертировать в байтики явно.
bormand 18.02.2022 19:39 # 0
Вспоминается история про mysql и проверку пароля, когда любой пароль подходил с вероятностью 1/256.
OPAHrymaH 18.02.2022 20:07 # 0
https://thehackernews.com/2012/06/cve-2012-2122-serious-mysql.html
По стандарту memcmp возвращает int. Обычно она возвращает разность между первой парой байтов, которые не совпали. Как именно её считать, нигде не документируется. Просто не ноль означает, что данные не совпали.
Даже в теории эта разность может быть в диапазоне от -255 до +255, если её считать как алгебраическую, что не влезает в диапазон signed char.
Видимо, у авторов MySQL эта разность считалась как XOR, поэтому всегда влезала в 8 бит.
bormand 18.02.2022 20:12 # 0
OPAHrymaH 18.02.2022 20:13 # 0
bormand 18.02.2022 20:14 # 0
DaveMustAim 18.02.2022 20:33 # 0
OPAHrymaH 20.02.2022 02:15 # 0
Если брать алгебраическую разность первых несовпавших байтов, то можно придумать такие примеры:
1. В одной из строк есть символы за пределами ASCII.
2. Строки не текстовые, а из двоичных данных. Например, сравниваются двоичные представления хэш-сумм.
Если первые несовпавшие байты равны 0x21 (восклицательный знак) и 0xa1, то разность второго с первым будет 0x80=128.
bormand 21.02.2022 20:01 # 0
> 128
128 != 0, проверка не пройдена. Покажи реальный пример различных байтов на которых получится 0.
guest6 21.02.2022 20:03 # 0
лол, чтобы так обосраца, надо быть.. ... ... мускулевцем
bormand 21.02.2022 20:12 # 0
Обосрались они только в том, что результат memcmp() кастанули в BOOL (байт) и он обрезался. Нули стали получаться не только когда хеши реально совпали, а тупо с вероятностью 1/256.
guest6 21.02.2022 22:24 # 0
они результат сравнения кастанули в бул?
bormand 21.02.2022 22:38 # 0
Не в bool а в BOOL. С крестовым bool всё ок было бы. Да и с ! было бы всё норм.
> плейнтекстовый
Не знаю. Хеш скорее всего.
guest6 21.02.2022 22:39 # 0
сишный BOOL это алиас для целого обычный, и потому по сути они сравнивали типа if (some_int) ?
bormand 21.02.2022 22:40 # 0
if ((bool)some_int) - норм
if ((BOOL)some_int) - не норм
Вклинилась потеря информации посредине.
З.Ы. Это условный пример. Конечно там был более сложный код. Но суть та же.
guest6 21.02.2022 22:44 # 0
bormand 21.02.2022 22:44 # 0
guest6 21.02.2022 22:47 # 0
А можно чисто static_castнуть в BOOL безопасно, или нескомпилица?
тут же по сути получился reinterpreter?
bormand 21.02.2022 22:49 # 0
guest6 21.02.2022 22:53 # 0
какой багор
3_dar 21.02.2022 22:49 # 0
guest6 21.02.2022 22:54 # 0
guest6 18.02.2022 21:19 # 0
guest6 18.02.2022 21:13 # 0
Разве в дотнете принято маршалить сырые данные?
Steve_Brown 18.02.2022 19:05 # 0
bormand 18.02.2022 19:12 # +1
На некоторых ARM'овских контроллерах есть окно в адресном пространстве, через которое видно кусок оперативки растянутый в 8 раз (каждый бит видно как байт). Вот в нём можно брать указатели на "биты".
Правда х.з. зачем всё это.
Soul_re@ver 18.02.2022 19:20 # +1
bormand 18.02.2022 19:33 # 0
guest6 18.02.2022 21:12 # 0
bormand 18.02.2022 21:14 # 0
guest6 18.02.2022 21:22 # 0
bormand 18.02.2022 21:25 # 0
guest6 18.02.2022 21:27 # 0
bormand 18.02.2022 21:29 # 0
guest6 18.02.2022 21:30 # 0
[quote]
гда непонятно, как адрес брать. Или bool* будет занимать больше места, чем обычный указатель
[/quote]
Чем меньше сущностей -- тем лучше же
Soul_re@ver 18.02.2022 21:32 # 0
На х64 ты всё адресное пространство не используешь. Три бита для адресации индивидуальных битов в байте отжать можно.
KaBauHblu_nemyx 18.02.2022 21:33 # 0
guest6 18.02.2022 21:34 # 0
guest6 18.02.2022 21:35 # 0
Fike 18.02.2022 23:24 # 0
именно поэтому я против «зумерского идиотобесия», понапридумывали лишних типов и сидят систему типов дрочат - вместо того чтобы программы писать
guest6 18.02.2022 23:27 # +1
DaveMustAim 18.02.2022 23:33 # +1
guest6 18.02.2022 23:39 # 0
Fike 19.02.2022 02:27 # 0
guest6 19.02.2022 04:32 # 0
BOKCEJIbHblu_nemyx 19.02.2022 04:33 # 0
guest6 19.02.2022 04:35 # 0
guest6 18.02.2022 21:28 # 0
https://postimg.cc/rR9gcYCP
https://postimg.cc/cK8pZ0Kk
Fike 18.02.2022 23:26 # +1
ObeseYoung 19.02.2022 08:17 # 0
OPAHrymaH 20.02.2022 02:10 # 0
guest6 19.02.2022 00:21 # 0
yet_another_one_shit 19.02.2022 00:33 # 0
Fike 19.02.2022 02:29 # 0
Rooster 19.02.2022 02:33 # 0
KaBauHblu_nemyx 19.02.2022 03:33 # 0
guest6 19.02.2022 04:31 # 0
guest6 19.02.2022 04:14 # 0
Fike 19.02.2022 23:29 # 0
Noodles 19.02.2022 23:33 # 0
guest6 20.02.2022 15:20 # 0
Fike 20.02.2022 15:30 # +1
guest6 20.02.2022 17:25 # +1
guest6 20.02.2022 18:48 # 0
guest6 20.02.2022 18:50 # 0
guest6 20.02.2022 19:00 # +1
nOJlKOBHuK_CAHDEPC 20.02.2022 20:41 # 0
guest6 20.02.2022 15:31 # 0
guest6 20.02.2022 17:24 # 0
bormand 19.02.2022 23:40 # 0
Soul_re@ver 19.02.2022 23:52 # +2
Должно быть:
Так намного веселее
http://coliru.stacked-crooked.com/a/ae6506c90f86b938
bormand 19.02.2022 23:59 # 0
Soul_re@ver 20.02.2022 00:06 # +2
bormand 20.02.2022 00:17 # +2
Fuck the logic.
Fike 20.02.2022 00:29 # +1
bormand 20.02.2022 00:30 # 0
Fike 20.02.2022 00:35 # 0
bormand 20.02.2022 00:38 # 0
bormand 20.02.2022 00:32 # 0
true2 && true2 и true4 && true4 истинны, но true2 && true4 ложно.
MPA3b 20.02.2022 00:33 # 0
bormand 20.02.2022 00:59 # 0
Волновая функция коллапсирует. И если мы измерили x как истинное, то !x будет ложным и наоборот. Вроде всё ок.
bormand 20.02.2022 01:07 # 0
HE_OTBE4Au_YE6KY 20.02.2022 01:12 # 0
guest6 20.02.2022 01:13 # +1
Хотел получить хуйню - предсказуемо получил.
Noodles 20.02.2022 01:33 # 0
OPAHrymaH 20.02.2022 02:04 # 0
Soul_re@ver 20.02.2022 02:14 # +1
http://coliru.stacked-crooked.com/a/d989d30ddb1cdd1b
OPAHrymaH 20.02.2022 02:22 # 0
bormand 20.02.2022 07:06 # +1
Ga_Dong_Tao 20.02.2022 07:33 # 0
kcalbCube 21.02.2022 07:03 # 0
BEKTOPHblu_nETyX 21.02.2022 07:34 # −1
Pretty_Young_Thing 21.02.2022 08:34 # −1
whois 21.02.2022 09:34 # −1
nepekam 21.02.2022 09:50 # −1
Noodles 21.02.2022 10:48 # −1
Pretty_Young_Thing 21.02.2022 11:34 # −1
Support 21.02.2022 12:31 # 0
BOKCEJIbHblu_nemyx 21.02.2022 12:34 # 0
Ga_Dong_Tao 21.02.2022 13:34 # +1
kcalbCube 21.02.2022 14:25 # 0
Noodles 21.02.2022 14:42 # 0
guest6 21.02.2022 14:44 # +1
Noodles 21.02.2022 14:46 # 0
kcalbCube 21.02.2022 14:52 # 0
guest6 21.02.2022 14:44 # +1
HE_OTBE4Au_YE6KY 22.02.2022 17:21 # 0