执行没有入口点的Symbian DLL

时间:2016-03-15 17:20:37

标签: assembly dll arm symbian s60

我的目标是为基于Symbian OS 9的移动游戏设备N-Gage创建一个模拟器。遗憾的是,设备(Symbian)可执行文件的执行似乎比我想象的要复杂得多。

首先,一些背景资料。该器件基于ARM920T处理器,该处理器基于ARMv4T架构。为系统制作的游戏以DLL形式提供,它们采用标准的Symbian 9 .app格式。 N-Gage的SDK基于Symbian S60 SDK第1版。

虽然有些游戏之前执行过其他一些杂项指令,但我首先想看看每个可执行文件的前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的值是多少?

1 个答案:

答案 0 :(得分:0)

正如Michael所说,应用程序被编译为DLL,然后由apprun.exe执行。这条线索让我走上了正确的道路。

现在回答我自己的观点:

  

为什么游戏是DLL而不是实际的可执行文件?

似乎它只是Symbian操作系统的一种奇怪。

  

如何加载给定的DLL以供系统执行?

首先调用E32Dll()初始值设定项(主"入口点"),然后调用NewApplication()函数,它应该是第一个导出的函数。

大多数应用程序只是从E32Dll()返回false(0)表示成功,但某些应用程序在返回之前会执行其他处理。

  

DLL的实际入口点是什么,如果它只有上面提到的2个出口?

NewApplication()是真实的"入口点,虽然有些应用程序在E32Dll()中进行了更多处理。

  

假设主入口点被调用,执行时LR的值是多少?

从apprun.exe调用E32Dll()的地方。