有关 E32 下压缩过的可执行文件的解压问题

EKA2 上,好像可执行文件默认就都是压缩过的,不知道是不是只有 RVCT 的配置是这样,还是 GCCE 也是,没试。

很久以前我就写了个解压器,过程中要把 Symbian 写的代码改不少,这些改动随着去年的硬盘都去了。没想到眼下的项目里又要用到解压,靠,上周五、上周六、昨天和今天,大部分时间都在搞这个了。上午好不容易弄得差不多了,Debug 编译好使,Release 就会崩溃,实在是痛苦,因为这种问题是最难调试的,Release 里就是让编译器生成调试信息也不全。好在当代码运行到某个地方的时候,某一行代码触动了我的尘封记忆,直觉上这个问题我之前时遇见过的,而且问题就出在这行代码上。那是一条不起眼的内存复制语句,而我猛然想起,可能需要使用 memmove 而不是 memcpy。事实证明我是对,哈哈。

可惜好景不长,到 Symbian 下该语句会导致崩溃。为了保证代码的最大兼容性,我按照 Symbian 的 Mem 类在 Windows 下实现了一遍,把 memmove 封装到了 Mem::Move 里。现在可好,使用 Symbian 系统自己的 Mem::Move 反倒出问题,只好去查文档。乖乖,原来 Mem::Move 有很多限制,起始地址(无论目的还是源)需要在 WORD 边界上,而且长度需要是 4 的倍数,令我汗流不止。只好直接写成 memmove 了……

发表评论

电子邮件地址不会被公开。 必填项已用*标注