2016-03-15 2 views
0

Моя цель - создать эмулятор для мобильного игрового устройства под Symbian OS 9 под названием N-Gage. К сожалению, выполнение исполняемых файлов устройства (Symbian) кажется более сложным, чем я думал.Выполнение скриптов из Symbian с отсутствием точки входа

Во-первых, некоторые справочные данные. Устройство основано на процессоре ARM920T, который основан на архитектуре ARMv4T. Игры, сделанные для системы, предоставляются в виде DLL, которые находятся в стандартном формате pre-Symbian 9. .app. SDK для N-Gage основан на первом выпуске Symbian S60 SDK.

В то время как некоторые игры выполнять некоторые другие разные инструкции, прежде чем, я бы сначала хотел взглянуть на первые 3 «стандартные» инструкции каждого исполняемого файла, который, кажется, всегда были сформированы:

7C: B 0x1234 // The location of the branch can be anywhere 
... 
1234: MOV R0, #0 
1238: BX LR 

Все библиотеки DLL также имеют 2 экспорта: основную запись (показана выше) и другой экспорт в случайной точке кода.

Первые инструкции пара и другие обстоятельства него есть привести меня в замешательство:

  1. Почему игра будет DLL вместо фактического исполняемого файла?
  2. Как загрузить данную DLL для выполнения системой?
  3. Какова будет фактическая точка входа в DLL, если она имеет только 2 экспорта, упомянутых выше?
  4. Какова будет ценность LR при исполнении, если предполагается, что вызывается главная точка входа?
+2

«Разработка программного обеспечения для ОС Symbian» утверждает, что до Symbian 9 было распространено применение приложений в виде файлов DLL, которые будут загружены системным приложением 'apprun.exe'. – Michael

+1

Если у второго экспорта нет общего имени, то я предполагаю, что имя будет указано как точка входа в игру где-то в другом месте, например, в базе данных установленных приложений. Значение в LR, по-видимому, является обратным адресом функции, называемой основной записью, которая обычно является самой ОС, если это точка входа в DLL. Я предполагаю, что точка входа работает как DLLMain Windows, и поэтому часто не нужно ничего делать. (Хотя Windows DLL вернет TRUE, а не 0 (FALSE)). –

+0

Майкл и Росс, спасибо вам большое! Ты привел меня на правильный путь. Я выяснил ответ и сам отправил ответ, который отвечает на мои собственные вопросы. – tambre

ответ

0

Как упоминалось Майклом, приложение вместо этого компилируется как DLL и затем выполняется apprun.exe. Этот ключ привел меня к правильному пути.

Going ответить на мои собственные пункты в настоящее время:

Почему игра будет DLL вместо фактического исполняемого файла?

Похоже, что это просто странность ОС Symbian.

Как загрузить данную DLL для выполнения системой?

Сначала будет вызываться инициализатор E32Dll() (основная «точка входа»), после чего вызывается функция NewApplication(), которая должна быть первой экспортируемой функцией.

Большинство приложений просто возвращают false (0) из E32Dll(), чтобы указать успех, но некоторые приложения выполняют другую обработку перед возвратом.

Какова будет фактическая точка входа в DLL, если у нее есть только 2 экспорта, упомянутых выше?

NewApplication() является «реальной» точкой входа, хотя некоторые приложения выполняют большую обработку в E32Dll().

Какова была бы ценность LR при исполнении, при условии, что вызывается главная точка входа?

Место, где вызывается E32Dll() из apprun.exe.

Смежные вопросы