Почалося все як завжди — з підозр. Аж надто багато людей приходить на мої сайти, які скачують дистрибутиви програм за прямими посиланнями без рефереров. Якось дивно це, правда? Не може ж бути так популярні блокувальники посилань. Я помічав деякі адреси і користувачі зазвичай приходили знову скачувати без посилання. Часто іншу програму — ніяк не відноситься до першої. Далі пішли в хід перевірки, що так як в логах. Виявилося, що абсолютна більшість таких заходів — дивні користувачі, які мають порожні HTTP_ACCEPT_ENCODING і HTTP_ACCEPT_LANGUAGE. HTTP_USER_AGENT іноді вказує на Java, JavaScript, Wget, Perl, PHP і так далі, але більшість звичайні рядки браузерів. Всі більш-менш пристойні пошуковики у мене давно враховуються і це, звичайно, не вони.

Читати далі →

Спираючись на матеріал, описаний в першої частини даної статті, ми продовжимо обговорення теми обробки виключень в Windows x64. І в цій частині ми докладно розглянемо ті області PE образу, які використовуються в процесі обробки винятків. Описуваний матеріал вимагає знання базових понять, таких, як пролог, епілог, кадр функції та розуміння базових процесів, таких, як дії прологу і епілогу, передача параметрів функції і повернення результату функції. Якщо читач не знайомий з вищепереліченим, то перед прочитанням рекомендується ознайомитися з матеріалом з першої частини цієї статті.

Читати далі →

КДПВ
Вивчення віртуального адресного простору і алгоритму перетворення адрес помітно спроститься, якщо почати з нескладного практичного прикладу. Для цього напишемо просту програму, що виводить адресу локальної змінної:
int main()
{
unsigned i = 0xDEADBEEF;
std::cout << "address of i is " << std::hex << &i;
std::cin.get(); //Щоб процес не завершився
return 0;
}

Потім спробуємо знайти фізичну адресу і переглянути значення за цією адресою.

Читати далі →

Поставляються у складі пакету MIPSfpga документація, і конфігураційні файли припускають застосування Bus Bluster в якості апаратного відладчика. Стаття містить інструкції з використання для цієї мети практично будь-якого USB-UART адаптера, побудованого на мікросхемі FTDI з підтримкою MPSSE (FT232H, FT2232H, FT4232H, FT2232D). Коротко описується інтеграція середовища розробки Visual Studio Code і налагоджувача GNU GDB.
Всі конфігураційні файли, які описуються в статті, а також частина документації доступні на github.
Елементи системи
image
Читати далі →


У нашій інженерної лабораторії з'явилася нова російська плата для експериментів — налагоджувальний модуль Салют-ЭЛ24Д1 на багатоядерний сигнальному мікропроцесорі 1892ВМ14Я. Подивимося, на що він здатний.

Читати далі →

Я тільки що закінчив серію змін в коді браузера Chrome, яка зменшила розмір його бінарника під Windows приблизно на 1 мегабайт, перенесла близько 500 КВ з read/write сегмента в read-only, а також зменшила споживання оперативної пам'яті загалом приблизно на 200 KB на кожен процес Chrome. Дивовижне полягає в тому, що конкретно дана серія змін складалася виключно з видалення і додавання ключового слова const в деяких місцях коду. Так, компілятори — дивні.

Ця задача виникла, коли я писав документацію для деяких утиліт, які я використовую для дослідження регресій коду, пов'язаних із збільшенням розміру скомпільованих бінарників під Windows. Я запустив утиліту, скопіював у документацію її висновок та почав його описувати, коли помітив щось дивне: кілька великих глобальних об'єктів, які згідно архітектурі повинні були бути константними, чомусь знаходилися в сегменті read/write даних. Скорочена версія того висновку утиліти показана нижче:

image

Більшість виконуваних форматів мають як мінімум два сегмента даних — один для read/write об'єктів і ще один для read-only. Якщо у вас є константные дані, такі, наприклад, як kBrotliDictionary, то їх буде логічно помістити в read-only сегмент, який є сегментом «2» в бінарники Chrome під Windows. Однак деякі константные дані, такі як unigram_table, device::UsbIds::vendors_ blink::serializedCharacterData були в секції «3», тобто read/write сегменті.

image

Читати далі →

Нижче представлено графічне опис переміщення, копіювання та запозичення в мовою програмування Rust. В основному, ці поняття специфічні тільки для Rust, будучи спільним каменем спотикання для багатьох новачків.

Щоб уникнути плутанини, я спробував звести текст до мінімуму. Дана замітка не є заміною різних навчальних посібників, і лише зроблена для тих,
хто вважає, що візуально інформація сприймається легше. Якщо ви тільки почали вивчати Rust і вважаєте дані графіки корисними, то я б порекомендував вам відзначати свій код схожими схемами для кращого закріплення понять.

Читати далі →

Виключення Windows x64. Як це працює. Частина 1

Раніше ми обговорювали прикладне застосування механізму обробки виключень поза середовища Windows. Тепер ми більш детально розглянемо, як це працює в Windows x64. Матеріал буде описаний послідовно, починаючи з самих основ. Тому багато чого може виявитися вам знайомим, і в цьому випадку такі моменти можна просто пропустити.

Читати далі →

Чорна магія метапрограммирования: як працюють макроси в Rust 1.15

минулій статті ми познайомилися з однією з найцікавіших можливостей мови Rust — процедурними макросами.
Як і обіцяв, сьогодні я розповім про те, як писати такі макроси самостійно і в чому їх принципова відмінність від сумнозвісних макросів препроцесора C/C++.
Але спочатку пройдемося по релізу 1.15 і поговоримо про інші нововведення, оскільки для багатьох вони виявилися не менш затребувані.
Читати далі →

Процедурні макроси в Rust 1.15

Хлопці, здійснилося! Після довгих шести тижнів очікування нарешті вийшла версія Rust 1.15 з блекджек і процедурними макросами.
На мою нескромному думку, це самий значний реліз, після епічного 1.0. Серед безлічі смачних речей в цьому релізі були стабілізовані процедурні макроси, підривають мозок своєю могутністю, зручністю і безпекою.
А що ж це дає простим смертним? Практично безкоштовну [де]серіалізацію, зручний інтерфейс до БД, інтуїтивний веб фреймворк, виводяться конструктори і багато чого ще.
Так, якщо ви все ще не дісталися до цієї мови, то зараз саме час спробувати, тим більше, що тепер встановити компілятор і оточення стало можна одним рядком:
curl https://sh.rustup.rs -sSf | sh

Втім, про все по порядку.
Читати далі →