Comments 87
"//TODO: сделать нормально"
…
Не сделали…
А TODO это хорошо, говорит о том, что человек знал что делает, что это плохо и места пометил для потомков. Некоторые даже не понимают, что они плохо делают, потом рефакторинг зубы ломает.
androidxref.com/6.0.1_r10/xref/frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
Вот сейчас там 10к строк androidxref.com/6.0.1_r10/xref/frameworks/base/core/java/android/widget/TextView.java
ты псих
#define UNPROTECT(addr,len) (mprotect((void*)(addr-(addr%len)),len,PROT_READ|PROT_WRITE|PROT_EXEC))
void detour_function(void * new_adr, int addr)
{
int call = (int)(new_adr - addr - 5);
UNPROTECT(addr, 4096);
*((unsigned char*)(addr)) = 0xE9;
*((int*)(addr + 1)) = call;
}
Потом достаточно написать свои функции и перенаправить вызов:
detour_function(&hasp_init_game, (int)0x080BD120);
Очень просто и быстро. А если нужна поддержка разных версий, то есть еще и код, который ищет функцию в заданном адресном промежутке по ее сигнатуре.
Вообще я бы подключал код на C++ только в случае переписывания огромных частей кода. Например, в NFS3 меню заточено строго под 640×480, и для поддержки современных разрешений его по хорошему нужно полностью переписать (и перерисовать всю соответствующую графику). Вот при такой переделке я бы стал писать новый код уже на C++ :)
Теоретически с легальной точки зрения всё тоже проще, но тут к юристам лучше, наверное не всё так просто.
1) Вполне возможно, что и с таким кривым исполнением Need For Speed III была весьма рентабельна для производителя. Если юзер не видит бага (а юзер не будет в коде ковыряться) — проблемы для рынка условно нет.
2) Бывает еще, что начальство бегает и орет: «Где результат, млин? Сроки прошли!». В такой ситуации человеку придется делать кое-как с комментариями "//TODO: сделать нормально". Ибо кушать хочется, дети малые дома сидят, ипотека не плачена…
На PC не был. Деньги вернули и если, что и заработали, то только на тех кто не успел вернуть деньгу.
if (Process_Is_NFS3()) { отдавать старый список форматов текстур };
Вспоминается история Oracle, где пока их конкуренты вдумчиво пилили что-то, ораклы методом «херак херак и в продакшн» получили рабочий (более-менее) продукт и начали получать заказы от крупных клиентов, в том числе военщины.
По теме: копипаста действительно может сыграть злую шутку, так как можно не учесть условия применимости используемых кусков, как указано в посте — ещё и с ошибками.
Если вы про фразу в заголовке статьи, то фраза старая и встречается у многих авторов. Обычно приписывают Стиву Макконелу, в Code Complete.
Кстати, есть информация, что с ним случилосьДа я сам хотел бы знать. Тоже искал — нигде никакой информации, а уже больше года с последнего «поста» прошло про сильных программистов… Только и остается, что перечитывать старые истории, поностальгировать, так сказать…
Хотя один плюс в этом есть — IThappens хотя бы остался до самого своего конца «айтишным», а вот с того же Баша, как писали недавно на нём же, сначала исчезли айтишные шутки и истории, потом — околоайтишные, а затем и просто шутки, а остались срачи.
Bill Mitchell View profile More options Sep 26 1991, 1:57 am In article <5...@ksr.com> j...@ksr.com (John F. Woods) writes:
[...] Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Code for readability.
Damn right!
1991 year — OMG!
Каждый раз, когда вижу вот такие реверс-инженерные статьи, я восхищаюсь авторами.
Но смотря на вроде бы знакомые команды в целом нефига не понятно.
Поэтому вопрос: в какую сторону покурить, чтобы быть немного в теме? (Так-то некоторые представления об ассемблере х86 имею, писал на нем, правда совсем чуть-чуть). Какие программные средства используются для этого дела?
Что это за блоки кода с соединительными линиями?
Для реверса часто используется IDA (скрины оттуда же) (https://ru.wikipedia.org/wiki/IDA).
Красные/зелёные стрелки для обозначения перехода по ложному/истинному условию, синие для безусловного перехода.
mov eax, ds:[functable+ebx*4h]
call eax
он раскрывал в полный ужас, понять который было нереально.
Хотя согласен, длинные функции с кучей параметров через него изучать проще.
Вообще в современных гонках, как оказалось, сплит-скрин уже не обязательная возможность. А для меня это обязательная возможность, потому что я играю в гонки (и другие игры) как раз тогда, когда кто-нибудь ко мне заглянет в гости поболтать. С геймпадами, сидя на диване, а не как в детстве, два человека за одной клавиатурой.
И подобный oldschool, я считаю, здорово. У меня так вообще эти гонки прошли в основном под знаком PS1. Кстати, интересно было бы сравнить код с консольной версией.
Планируете поддержку Xinput?
Кстати, в 1998 году вышла еще одна крутая и сильно багованная игра — Trespasser. И у нее тоже есть фанаты, которые реверсом и такой-то матерью делают патчи, улучшают движок и даже добавляют новые уровни…
Сам раньше часто ковырялся в игрушках популярных, иногда код вызывает ночные кошмары, когда видишь, например, что все данные сделаны глобально статическими и доступны просто отовсюду из любой функции! Удобно ж блин! :D
Зато потом за свой код не стыдно особо, когда видишь, что мировые гиганты пишут такое говно в продакшн.
EA Games прославилась как самая соковыжимающая компания. Переработки обязательны. Разработчики в кубиклах и ящики редбула. (Довольно известная история, с фотографиями и десятилетиями обсуждения)
И уже давно ДОКАЗАНО, что те 60-80 часов в неделю, которые EA Games требует привели к меньшей эффективности, чем традиционные 40 часов.
Насколько я знаю они не меняли подхода к разработке до сих пор.
Так, что эти глупые ошибки делали Сишные программисты-зомби в анабиозе. (Не стеляйте программиста, пристрелите таких управленцев)
Хотя, конечно, реализация этого костыльного метода была сама по себе проще, и на реализацию переворачивания модели трассы при загрузке наверняка ушло бы больше времени. Зато было бы надёжнее :)
update: или кабина там позже рисуется и не отображается зеркально?
потому что через 20 лет какой-нибудь маньяк будет изучать и дорабатывать машинный код вашего продукта, и он может захотеть вас найтиЕсли кто-то через 20 лет захочет изучить и доработать ваш код это значит, что вы написали очень хорошую программу иначе ее бы давным давно выкинули на свалку.
Привет из 2022, существуют ли утёкшие в сеть дебажные символы?
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте