Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2013, 19:28   #1
Vlad11
 
Регистрация: 11.04.2013
Сообщений: 5
Вопрос Вопрос по правке кода

Собираюсь летом взяться учить с\c++. Решил когда более менее разберусь, попытаться портировать старенькую игру на андроид. Вот только исходного кода нету. Скачал декомпилятор(ida pro+hex-rays), декомпилировал в *.с . Ясен пень код невообразимо кривой. Мне нужен ответ на несколько вопросов:
1. На сколько трудно(и вообще возможно ли) будет исправить код, и заставить его работать?
2. Чем в общем отличается с от с++? Переименовал *.с в *.cpp, попробовал скомпилировать ошибки те же. Просто мне надо будет код в с++ а не в с. Файл прилагается. MAGESLAY.zip
Хотел под спойлер кинуть, но не нашёл соответствующую кнопку.
Vlad11 вне форума Ответить с цитированием
Старый 11.04.2013, 20:16   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Мне кажется будет проще написать новый код на С++, чем править и разбираться в некомпилирующемся коде. Там и структура программы будет понятна, т.к. ты её сам создаешь и проектируешь
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 11.04.2013, 20:41   #3
Icy_Wind
Новичок
Джуниор
 
Регистрация: 11.04.2013
Сообщений: 3
По умолчанию

1.) Не знаю
2.) На мой взгляд, главное отличие C++ от C - это то, что c++ - это объектно ориентированный язык. На практике это означает, что программы, как дом, строятся из кирпичиков - классов. Класс - это основное понятие в любом объектно-ориентированном языке. А вся программа - это взаимодействие конкретных экземпляров классов между собой.
p.s. с++ полностью поддерживает синтаксис с. Поэтому, и компилируется всё с теме же ошибками. Если ты напишешь код на с, то он одновременно будет и кодом на с++
Icy_Wind вне форума Ответить с цитированием
Старый 11.04.2013, 21:16   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Vlad11 Посмотреть сообщение
Собираюсь летом взяться учить с\c++. Решил когда более менее разберусь, попытаться портировать старенькую игру на андроид. Вот только исходного кода нету. Скачал декомпилятор(ida pro+hex-rays), декомпилировал в *.с . Ясен пень код невообразимо кривой. Мне нужен ответ на несколько вопросов:
1. На сколько трудно(и вообще возможно ли) будет исправить код, и заставить его работать?
2. Чем в общем отличается с от с++? Переименовал *.с в *.cpp, попробовал скомпилировать ошибки те же. Просто мне надо будет код в с++ а не в с. Файл прилагается. Вложение 59438
Хотел под спойлер кинуть, но не нашёл соответствующую кнопку.
1. Тебе - не реально. Человек, который способен восстановить исходник из бинарника не стал бы задавать подобные вопросы.

2. Си и с++ - это два разных языка программирования.
Различаются используемыми парадигмами, и технологиями.

Цитата:
Сообщение от Icy_Wind Посмотреть сообщение
1.)
p.s. с++ полностью поддерживает синтаксис с. Поэтому, и компилируется всё с теме же ошибками. Если ты напишешь код на с, то он одновременно будет и кодом на с++
Ничего подобного. Это два разных языка и у них свои собственные стандарты.

Например, этот код совершенно законный для языка си
Код:
void func (int x, int y)
{
  int arr[x][y]; // <--- c99
  ...
}
Попробуй скомпилировать его студийным компилятором с++

Последний раз редактировалось _Bers; 11.04.2013 в 21:23.
_Bers вне форума Ответить с цитированием
Старый 11.04.2013, 21:49   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
1. На сколько трудно(и вообще возможно ли) будет исправить код, и заставить его работать?
Возможно. С высокой вероятностью, результат не будет стоить затраченных усилий. Выделите и усвойте ключевые алгоритмы игры, остальное в топку. Ещё вопрос, насколько старая игра, но с вероятностью 99% под планшет нужно переделывать управление и отрисовку графики, хотя бы частично; возможно, даже перепроектировать некоторые вещи (например, если игра вычисляла скорость курсора мыши). Если игра - Mageslayer от Raven Software, то её движок, кажется, опирается на вызовы соответствующей версии DirectX (1997 год, да-да). Поскольку настолько старый DirectX Вам никто не даст (а обратная совместимость у него очень даже ограничена), эту часть один чёрт надо переписывать.
Цитата:
Чем в общем отличается с от с++?
Во многих случаях, корректный код на C также является корректным кодом на C++ (обратное неверно). Есть ряд исключений, подобных приведённому _Bers.
Abstraction вне форума Ответить с цитированием
Старый 11.04.2013, 22:12   #6
Vlad11
 
Регистрация: 11.04.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Если игра - Mageslayer от Raven Software
Да, да.
Цитата:
Сообщение от Abstraction Посмотреть сообщение
Во многих случаях, корректный код на C также является корректным кодом на C++
Но как я понял, если взять код на с, переименовать в cpp, скомпилировать, то вероятность что приложение будет полностью или частично(т.е запустится) работать, не очень велика?
Цитата:
Сообщение от Abstraction Посмотреть сообщение
под планшет нужно переделывать управление и отрисовку графики
Можно например просто сделать так, чтобы при нажатии на определённую точку экрана(например нижнюю левую) появлялась вирт.клавиатура, а управление можно поставить в cfg файле(ведь кешом будут обычные ресурсы, я их кстати смог распаковать), +там же поставить минимальные настройки графики. Я запускал mageslayer эмулятором bosch(смарт-lg e612 l5), запустилось, но лагало ужасно(в эмуляторе мощность смарта падает раз так в 30), хотя например nfs 2012 шла без лагов.
Но вся главная проблема, что нет исходников, хотя raven software опубликовали исходники множества других игр.

Цитата:
Сообщение от Abstraction Посмотреть сообщение
соответствующей версии DirectX
Есть режимы графики без direct.
В настройках:
*х*;
*x* d3d;
Как я понял в первом варианте direct не используется, т.к это видео ускоритель, и в старых играх можно обойтись и без него, если есть 3д карта. Или я ошибаюсь?

Последний раз редактировалось Stilet; 12.04.2013 в 19:16.
Vlad11 вне форума Ответить с цитированием
Старый 12.04.2013, 11:17   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Но как я понял, если взять код на с, переименовать в cpp, скомпилировать, то вероятность что приложение будет полностью или частично(т.е запустится) работать, не очень велика?
Если исходный код на C компилировался - довольно приличная. Но... декомпилятор не обязательно порождает нормально компилируемый (произвольным компилятором) код, вот какая засада. А уж если код зависел от аппаратной платформы, а Вы пытаетесь скомпилировать его под другую платформу... у-у-у...
Цитата:
Как я понял в первом варианте direct не используется, т.к это видео ускоритель, и в старых играх можно обойтись и без него, если есть 3д карта. Или я ошибаюсь?
DirectX - библиотека для упрощения работы с видеокартой. Вместо этого работать с видеокартой напрямую - можно. Было. Но кто ж Вас в Андроиде напрямую к видеокарте пустит-то?
Abstraction вне форума Ответить с цитированием
Старый 12.04.2013, 14:16   #8
Vlad11
 
Регистрация: 11.04.2013
Сообщений: 5
По умолчанию

Я сначала хочу код "восстановить". А потом можно будет подумать и порте на андроид.

Приведу пару строчек из декомпилированного кода:
Код:
extern int dword_4A3640[5]; // weak
extern int dword_4A4660[5]; // weak
// extern _UNKNOWN _local_unwind2; weak
// extern _UNKNOWN sub_4A79E9; weak
// extern _UNKNOWN sub_4A7B28; weak
extern _UNKNOWN sub_4AF576; // weak
// extern _UNKNOWN sub_4AF5AA; weak
extern _UNKNOWN unk_4DB960; // weak
extern _UNKNOWN unk_4DBA60; // weak
То что отделено // - комментарии, верно? Однако тут закомментированы такие же строчки как и выше. Вопрос- недоработка декомпиляции или так и должно быть?

Таких строчек хватает. Их, конечно, не бесчисленное множество, но сотня таких строчек как минимум, думаю наберётся.

Последний раз редактировалось Stilet; 12.04.2013 в 19:19.
Vlad11 вне форума Ответить с цитированием
Старый 13.04.2013, 12:45   #9
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Я бы вам посоветовал сначала язык выучить, а уж потом восстанавливать декомпилированный код
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 13.04.2013, 13:34   #10
Vlad11
 
Регистрация: 11.04.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от kineziz Посмотреть сообщение
Я бы вам посоветовал сначала язык выучить, а уж потом восстанавливать декомпилированный код
Так я его и учу. Пока что с трудностями не столкнулся(уверен скоро они будут), он похож на паскаль. Иногда посматриваю декомпилированный код, ради интереса. Ну и увидев такие же строчки, только закомментированные, я решил спросить. Я же не спрашиваю что за оператор, что это, что то, бла бла бла. Просто увидев обычную вещь в другом виде, решил спросить, чтобы потом не спрашивать. И читал я, что при компиляции исходного кода в машинный, комментарии удаляются. Из-за всего этого и возник вопрос.
Vlad11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ вопрос эстэтики кода Antej Общие вопросы C/C++ 4 21.10.2012 07:32
Вопрос по поводу кода теста... bubkanet Помощь студентам 0 29.12.2011 06:59
Вопрос по форме кода Biggs Помощь студентам 7 16.07.2010 12:25
Вопрос по настройке кода Korect Свободное общение 1 09.03.2009 03:43
Вопрос об организации кода hebep Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 09.10.2008 17:24