У нее творчество достаточно разнообразное, и как я мог заметить, сильно зависит от того, с какой командой она исполняет. Больше всего меня привлекают песни периода The Dresden Dolls (типа такого www.youtube.com/watch?v=wTs0EBCdPmk). А последнее из того что я у нее слышал, мне, как неискушенному слушателю, непонятно.
Вы молодец, что занялись подобного рода развлечениями. Копаться в дизассемблированном коде игр приятно и, иногда, небесполезно. Читать об этом тоже занятно, тем более, что пишите вы интересно. Продолжайте изыскания, пишите еще.
Теперь о том что плохо.
В первой части вашей статьи написана ерунда. Код, на который вы обратили внимание (inc[rcx + 0x18]), действительно подсчитывает количество открытых клеток. Но, во-первых, когда вы заменяете его на (add[rcx + 0x18], 0xFFFFFFFF) не происходит никакого переполнения буфера, просто вместо прибавления единички, она отнимается. Зато, благодаря тому, что вы варварски затираете две инструкции, (xor edx, edx и mov r13, r10) происходит небольшой побочный эффект. Кстати, попробуйте, убрать только mov r13, r10, тоже интересно получается. Во-вторых, этот счетчик открытых клеток служит только для одного: определять когда игра закончилась. Это происходит так:
(if (board->width) * (board->height) == board->openedFields + board->numMines) {
board->gameWin();
}
так что, изменяя эту ячейку памяти, вы абсолютно ни на что не влияете.
Было бы желание. Кроме официального раскрытия исходников, существуют всякие реверсерские изыскания. Вот, например проект the Hell(модификация 1-го diablo). Там, насколько я знаю, код полностью декомпилирован из бинарников. Про модификацию fallout тоже видел как-то доклад, но там другой подход использовался.
Вычисляет(в многопоточном режиме(не удивляетесь, это было одним из пунктов задания))
Что здесь происходит? Я правильно понимаю, что во-первых, результаты функции FindFirstFile не используются, а во-вторых, вы делаете проверку на наличие одного приложения, а запускаете другое?
Один человек никогда не верил в Программирование. Однажды он тяжело заболел. У него не было глаз, ушей, ногтей, левой ноги и была дырка между плечами. Тогда он отучился у меня Три месяца. Два занятия в неделю по четыре часа. Всего 25 уроков, и в ту же минуту излечился.
А можете пояснить код функции Inj_PrepareInjector? Почему массив называется zg0oI, почему начинают записывать со смещения 0x200. Есть ли смысл у записываемых данных?
Теперь о том что плохо.
В первой части вашей статьи написана ерунда. Код, на который вы обратили внимание (inc[rcx + 0x18]), действительно подсчитывает количество открытых клеток. Но, во-первых, когда вы заменяете его на (add[rcx + 0x18], 0xFFFFFFFF) не происходит никакого переполнения буфера, просто вместо прибавления единички, она отнимается. Зато, благодаря тому, что вы варварски затираете две инструкции, (xor edx, edx и mov r13, r10) происходит небольшой побочный эффект. Кстати, попробуйте, убрать только mov r13, r10, тоже интересно получается. Во-вторых, этот счетчик открытых клеток служит только для одного: определять когда игра закончилась. Это происходит так:
(if (board->width) * (board->height) == board->openedFields + board->numMines) {
board->gameWin();
}
так что, изменяя эту ячейку памяти, вы абсолютно ни на что не влияете.
Что здесь происходит? Я правильно понимаю, что во-первых, результаты функции FindFirstFile не используются, а во-вторых, вы делаете проверку на наличие одного приложения, а запускаете другое?
Нет единого стиля форматирования кода и именования переменных.
Магические числа. Здесь же непонятно, зачем вам нужна структура и набор переменных с такими же именами как в структуре.
Какой это журнал у нас «8-ми битный»?