Notice: file_put_contents(): Write of 7609 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50

Warning: file_put_contents(): Only 12288 of 19897 bytes written, possibly out of free disk space in /var/www/tgoop/post.php on line 50
Алло, это отладочная?@gdb_dbg P.54
GDB_DBG Telegram 54
StrStrFast (часть 1)

Вечер пятницы – самое время, чтобы рассказать очередную байку про отладку!

Недавно отлаживал прекрасную проблему – злостный и непонятный развал виртуальный машины вдрабадан. Доступа к среде, где все хоть иногда воспроизводится проблема у меня не было, так что это была отладка по переписке: скажи коллеге в другой части мира, какой следующий эксперимент провести => через пару дней получи новый крэшлог => внимательно вглядывайся в него => повторяй все сначала.

Через какое-то (угадайте, какое!) количество попыток (и экстренных собраний, на которых мне объясняли, что отладить нужно как можно быстрее, ведь это именно так работает, да), я нарыл следующий набор фактов:

1. Развал происходит в каком-то стороннем нативе, а не в коде виртуальной машины (уже победа, но вдруг все-таки мы виноваты? позвали его, например, не коряво);
2. Более конкретно, это всегда было связано с сишным методом с интригующим названием StrStrFast;
3. Если развал случался, то обязательно в некотором цикле, при том именно на 93837 итерации. Именно на ней!
4. Известна даже инструкция, где что-то идет не так – это vpcmpeqb ymm2, ymm0, YMMWORD PTR [r13+rax*1+0x0].

Инструкция не совсем обычная, из AVX, работает с 256-битными ymm регистрами, но в целом пока ничего криминального.
И в вообще казалось бы, ну и все: смотри, кто передал мусор в StrStrFast, доказывай, что проблема не на нашей стороне и ура. Но не тут то было, ведь есть еще пара фактов:

5. Все входные данные в StrStrFast корректны. Там реально две хорошие, понятные строчки, память не битая. Вторая строка, кстати, довольно короткая – всего 8 байт;
6. Когда происходит развал, значение выражения r13+rax*1+0x0, конечно, всегда разное, но, например, может быть таким: 0x7ffc0a803fe8;
7. При этом память по адресу из r13+rax*1+0x0 всегда доступна для чтения и записи.

И это уже чуть странно, т.к. получается, что никто никакой мусор то не передавал.



На самом деле этой информации вполне хватило, чтобы раскопать проблему, так и не получая доступа к воспроизводящей среде.

Предлагаю вам сейчас остановиться, еще раз прочитать все вводные и предложить свою версию происходящего)

А я во второй части поста расскажу, как все было на самом деле ↓

#дух_машины
🔥3



tgoop.com/gdb_dbg/54
Create:
Last Update:

StrStrFast (часть 1)

Вечер пятницы – самое время, чтобы рассказать очередную байку про отладку!

Недавно отлаживал прекрасную проблему – злостный и непонятный развал виртуальный машины вдрабадан. Доступа к среде, где все хоть иногда воспроизводится проблема у меня не было, так что это была отладка по переписке: скажи коллеге в другой части мира, какой следующий эксперимент провести => через пару дней получи новый крэшлог => внимательно вглядывайся в него => повторяй все сначала.

Через какое-то (угадайте, какое!) количество попыток (и экстренных собраний, на которых мне объясняли, что отладить нужно как можно быстрее, ведь это именно так работает, да), я нарыл следующий набор фактов:

1. Развал происходит в каком-то стороннем нативе, а не в коде виртуальной машины (уже победа, но вдруг все-таки мы виноваты? позвали его, например, не коряво);
2. Более конкретно, это всегда было связано с сишным методом с интригующим названием StrStrFast;
3. Если развал случался, то обязательно в некотором цикле, при том именно на 93837 итерации. Именно на ней!
4. Известна даже инструкция, где что-то идет не так – это vpcmpeqb ymm2, ymm0, YMMWORD PTR [r13+rax*1+0x0].

Инструкция не совсем обычная, из AVX, работает с 256-битными ymm регистрами, но в целом пока ничего криминального.
И в вообще казалось бы, ну и все: смотри, кто передал мусор в StrStrFast, доказывай, что проблема не на нашей стороне и ура. Но не тут то было, ведь есть еще пара фактов:

5. Все входные данные в StrStrFast корректны. Там реально две хорошие, понятные строчки, память не битая. Вторая строка, кстати, довольно короткая – всего 8 байт;
6. Когда происходит развал, значение выражения r13+rax*1+0x0, конечно, всегда разное, но, например, может быть таким: 0x7ffc0a803fe8;
7. При этом память по адресу из r13+rax*1+0x0 всегда доступна для чтения и записи.

И это уже чуть странно, т.к. получается, что никто никакой мусор то не передавал.



На самом деле этой информации вполне хватило, чтобы раскопать проблему, так и не получая доступа к воспроизводящей среде.

Предлагаю вам сейчас остановиться, еще раз прочитать все вводные и предложить свою версию происходящего)

А я во второй части поста расскажу, как все было на самом деле ↓

#дух_машины

BY Алло, это отладочная?




Share with your friend now:
tgoop.com/gdb_dbg/54

View MORE
Open in Telegram


Telegram News

Date: |

Deputy District Judge Peter Hui sentenced computer technician Ng Man-ho on Thursday, a month after the 27-year-old, who ran a Telegram group called SUCK Channel, was found guilty of seven charges of conspiring to incite others to commit illegal acts during the 2019 extradition bill protests and subsequent months. To view your bio, click the Menu icon and select “View channel info.” Telegram is a leading cloud-based instant messages platform. It became popular in recent years for its privacy, speed, voice and video quality, and other unmatched features over its main competitor Whatsapp. With the “Bear Market Screaming Therapy Group,” we’ve now transcended language. A few years ago, you had to use a special bot to run a poll on Telegram. Now you can easily do that yourself in two clicks. Hit the Menu icon and select “Create Poll.” Write your question and add up to 10 options. Running polls is a powerful strategy for getting feedback from your audience. If you’re considering the possibility of modifying your channel in any way, be sure to ask your subscribers’ opinions first.
from us


Telegram Алло, это отладочная?
FROM American