swat_lc 发表于 2007-2-28 17:58:51

原帖由 wc3mf 于 2007-2-28 17:46 发表


对,就是CSMList,那个软件弄出来的绝对是正确有效的功能入口地址,不信你试试。用自定义×#的MP补丁。或者把CSMList的函数直接改成入口地址(偏移量)。

我没有打那个补丁,但是写了个程序直接调用刚刚你给的那个软件算出来一些地址,确实是能直接调用的地址,但是和我在论坛上找到的CSMList不一样。这个问题是解决了,但是号码呢?

另外,你可以对照CSMList和算出来的地址,就没一个一样的

[ 本帖最后由 swat_lc 于 2007-2-28 18:24 编辑 ]

wc3mf 发表于 2007-2-28 18:18:59

原帖由 swat_lc 于 2007-2-28 17:58 发表


我没有打那个补丁,但是写了个程序直接调用刚刚你给的那个软件算出来一些地址,确实是能直接调用的地址,但是和我在论坛上找到的CSMList不一样。这个问题是解决了,但是号码呢?


没有办法啊,这些东东只是地址,没有参数的,不能接受变量,死的

swat_lc 发表于 2007-2-28 18:41:00

我觉得那就是个跳转表,看来还真要反汇编看看。
刚又看了XTask,CSMList.txt确实只是一个CSM_RAM里的指向CSM_DESC的值,根本不可能是函数的地址,所以不可能调用,XTask也只是看CSMList里有没有要查的值,并不执行里面的地址。

jpg001 发表于 2007-3-1 13:40:02

功能地址表和csm地址不是一回事,不要混淆

功能地址是函数的入口地址,可以直接调用。

CSM = Computer Software (System) Management,大概是与进程有关的东东,具体的就不知道了

swat_lc 发表于 2007-3-1 14:03:51

原帖由 jpg001 于 2007-3-1 13:40 发表
功能地址表和csm地址不是一回事,不要混淆

功能地址是函数的入口地址,可以直接调用。

CSM = Computer Software (System) Management,大概是与进程有关的东东,具体的就不知道了

大大终于放话了,一直都不知道该怎么翻译这个CSM........
BTW,GBS又是什么的缩写?Globle XXX XXX?

crack4000 发表于 2007-3-1 20:46:07

谁有最新全部头文件啊,我更新SWILIB.h但这个里面还要包括什么SHA。H等,郁闷,老是找不到可以用的库,总是少这少好,到现在只编译成功过几个ELF,大部分给的源代码都有问题

wc3mf 发表于 2007-3-2 10:14:51

原帖由 jpg001 于 2007-3-1 13:40 发表
功能地址表和csm地址不是一回事,不要混淆

功能地址是函数的入口地址,可以直接调用。

CSM = Computer Software (System) Management,大概是与进程有关的东东,具体的就不知道了


学到东西了,再说一下,那个menu.mnu里面的才是功能函数,也可以用地址来代替。

along1976 发表于 2007-3-12 17:53:30

关于中文标题的显示问题

最近研究了一下标题显示中文的问题,与大家探讨一下。

当前的标题定义如下:
typedef struct
{
RECT rc; // 标题框位置
int *icon;// 图标标识
int lgp_id; // 语言包中字符串标识
int lgp_null; // 语言包标识
}HEADER_DESC;
当前仅能显示英文的标题或显示语言包中提供的信息。如下例:
(1)英文
HEADER_DESC gotomenu_HDR={0,0,131,21,/*icon*/(int*)&cfg_ab_icon,(int)"Select number",LGP_NULL};
(2)语言包中的2866号信息
HEADER_DESC gotomenu_HDR={0,0,131,21,/*icon*/(int*)&cfg_ab_icon,2866,LGP_NULL};
如果定义如下中文标题:
HEADER_DESC gotomenu_HDR={0,0,131,21,/*icon*/(int*)&cfg_ab_icon,(int)"选择号码",LGP_NULL}; 则显示的是“选择号码”的汉字内码。
如果用unicode码定义如下: “选择号码” -> 900962E953F77801
HEADER_DESC gotomenu_HDR={0,0,131,21,/*icon*/(int*)&cfg_ab_icon,(int)"\x90\x09\x62\xE9\x53\xF7\x78\x01",LGP_NULL}; 则显示的还是按单字节定义的相应字符串(倒序后也如此)。

后来又尝试用DrawString函数来画标题,但没有成功,可能是消息处理问题,根据没有画,或者显示后又被系统显示标题时刷新了。

但系统的通讯录浏览时,如果拨打电话,显示的号码列表的标题是可以显示中文人名的。

可能有如下两种原因,导致不能显示中文自定义标题。
1、调用的菜单显示处理函数不同,还有一个自绘标题的接口。
2、HEADER_DESC是否存在别的格式定义,支持重绘标题或unicode定义。

caiheng 发表于 2007-3-12 18:39:55

有没有试过用siemens自己的汉字内码?就是用一个工具转的那种,

这个是工具

jpg001 发表于 2007-3-12 19:48:59

鉴于ELF可以处理很多欧洲字符,如俄语、捷克语甚至乌克兰语等等(最新的mc自带这几种字库)。所以有个想法:

因为西机系统是由欧洲人开发,而后引入的中文,那么一个可能的猜想是,西机最初设计并没有考虑到双字节字符编码的问题(unicode在90年代才出现),或者处于效率考虑,仍旧设计了一套单字节字符处理方式,造成目前的中文西门子手机中存在两套字符处理系统,一套处理单字节的字符编码,如ISO 8859-x编码;而在中文系统上则默认使用双字节的字符处理系统。

如果是这样,那么假设:
1。在lib中可能存在着一个字符处理函数,我们可能只要找到双字节字符的处理函数替换之就可以处理中文了。但是也有可能需要对elfloader和mp进行一些处理。

2。其它方式,没有想到。。。


不过西机是有个自己的内码的,比较难以理解字符是怎么处理的。

[ 本帖最后由 jpg001 于 2007-3-12 19:52 编辑 ]

along1976 发表于 2007-3-13 09:33:55

原帖由 caiheng 于 2007-3-12 18:39 发表 http://mobile.0110.cn/images/common/back.gif
有没有试过用siemens自己的汉字内码?就是用一个工具转的那种,


我试过Unicode、倒序Unicode、西门子的内码、语言包的编码,都没有用,主要是显示函数还是按单字节去解析的。不知道有没有解析方式的控制,使其按双字节解析。

[ 本帖最后由 comdin 于 2007-3-13 10:34 编辑 ]

swat_lc 发表于 2007-3-20 17:46:53

我觉得似乎是一些Flag的变化,我们的Flash里有些结构里的参数跟俄国人写的未知参数不太一样,估计可能是这个引起的,当然,也试过用自己找到的参数,但同样显示不了,不过还是觉得应该是这一类问题。

补充一句,DrawString就能很好的显示中文,说明WS的字串就应该能被正常处理,如果真是再做另一套函数专门处理Unicode的话似乎比较费工,觉得还是在参数上多研究研究比较有前途

自绘很容易实现,只需要把MENU_DESC里的flags2改成2就行了,但是这样的话,系统就完全不管了,什么都要自己画,非常麻烦,所以不太现实。

[ 本帖最后由 swat_lc 于 2007-3-20 18:03 编辑 ]

swat_lc 发表于 2007-4-5 01:49:10

终于找到cfgEdit不能显示中文的原因了!
typedef struct
{
int type;
char name;
unsigned int min;
unsigned int max;
}CFG_HDR;
这是每一项的定义,看出来没?name是char型的,所以编译出来的自然就是ascii码了,但我们在使用wsprintf格式化输出标题的时候,却把中文字符给分割了,自然就显示不出来了。
如何解决呢?唯一的办法就是改变这个结构,要么name全部使用wchar型,要么多一项type,以此判断是unicode码还是ascii。
不过这样改变的话就引入两个问题:1.与原有的配置文件的兼容问题。2.编写代码就需要人工加入unicode码,似乎IAR没有unicode码的编译选项。第一个问题是最麻烦的,能显示中文的就显示不了英文,晕~
不知道谁还有什么高招么

swat_lc 发表于 2007-4-5 11:23:14

今天改了中文版的cfgEdit,有点小小的郁闷...
为了区分unicode码和Ascii码,必须要判断一下,最后选用标准Unicode码的前两字节(区分顺序的两字节)来区分,大于0xFE说明是Unicode码的开始。但似乎没有合适的函数来复制中文,于是只有自己写了,最郁闷的事发生了:复制过程怎么写都死机,我是直接将char型的指针直接转换为wchar型的指针,在电脑上用这个方法屡试不爽,可在手机上就不行了,应该是arm里short型的数据必须在偶地址开始,这就是我怎么写都错的问题。

nameX 发表于 2007-4-5 11:49:00

试试 #pragme pack(2) 编译选项吧.

具体可看帮助文件

swat_lc 发表于 2007-4-5 12:01:47

看帮助似乎是用来对声明数据对齐的,像short型数据的读取估计还是有问题,因为有时short在奇地址有时在偶地址,是不能在编译时确定的。

jpg001 发表于 2007-4-21 18:40:26

怎样制作各个机型使用的ELF

直接编译出各版本的ELF这个工作建议由ELF的作者来进行比较方便。

因为有很多人还不知道怎么编译各个机型的ELF,在这里写下:

我们在ELF工程中编译相应机型适用的elf时,需要做一些宏定义:
编译ELKA版本的elf,需要在c/c++编译器的预定义栏里定义如下三项:
NDEBUG
ELKA
NEWSGOLD
在Assembler中预定义如下两项:
NEWSGOLD
ELKA

编译newsgold适用的ELF则只需在c/c++编译器的预定义栏里定义如下两项:
NDEBUG
NEWSGOLD
在Assembler中预定义如下一项:
NEWSGOLD

编译sgold适用的ELF则只需在c/c++编译器的预定义栏里定义如下项即可:
NDEBUG

编译X75 in sgold适用的少部分ELF需在c/c++编译器的预定义栏里定义如下项:
NDEBUG
x75
在Assembler中预定义如下一项:
x75

或者在源代码中定义这些宏。然后在代码中使用条件编译来去分各机型的不同之处,就可以方便的编译出各版本的ELF了。

不同机型的部分函数及数据结构的定义的差别,可以参见swilib.h文件,其宏定义部分可以很容易看出各种机型的不同之处,有c基础的应该可以很容易看懂这些东西。建议仔细阅读此部分定义。

在做ELF的过程中,大家会用到和找到一些新的函数是lib里没有的,可以在此贴提交自己使用的新的函数:
http://forum.siemens-club.org/viewtopic.php?TopicID=57264&page=15
以免和别人产生冲突。最新的使用已经超过0x200的函数了。也可以向svn://cbsie.dyndns.info/ARM提交自己更新的swilib.h版本,共享自己的源代码。

[ 本帖最后由 jpg001 于 2007-4-21 19:17 编辑 ]

binghelingxi 发表于 2007-4-22 09:18:26

回复 #31 jpg001 的帖子

对的,这样他就能加入诸如#ifdef NEWSGOLD 的项目

但是个系统的区别。。。谁能说一下?
在什么样的地方要改,改成什么样?

jpg001 发表于 2007-4-22 11:18:05

系统的区别,我已经说了啊

在那个swilib.h头文件,开头的那些宏定义,那些结构定义,也是用的条件编译,有一些是不同的,那就是差别。

我们在做ELF得时候,主要改的是代码里关于这部分的一些东西。

[ 本帖最后由 jpg001 于 2007-4-22 11:19 编辑 ]

jpg001 发表于 2007-5-10 17:53:45

MD怎么处理中文的?希望有人来说明下。。
页: 1 [2] 3
查看完整版本: ELF 程序开发教程及技术讨论专贴