loquat 发表于 2010-12-5 18:12:24

ELFPack 3.0 alpha的源码,懂的人去修改吧

作者的说明,看了下源码,全平台通用,懂的人去加中文吧。我没有西机也不懂C
原帖地址:http://waper.ru/forum/post/16635232/Это серьёзная модификация ELFPack 2.3 24bit + alpha
Этот мод (а может и вообще новая версия классического)
содержит несколько новшеств:

1) EDL System (ELF Dynamic Library System)
Позволяет подгружать нужные эльфу ф-ии из так называемых
динамических библиотек, вынесено несколько ф-ии по работе с этой системой
Есть единая база, которая содержит в себе все "контакты" запущеных библиотек.
Сама библиотека это обычный эльф, содержащий EDL_HEADER, ф-ии, в соответствии
с назначением, скомпиленный по определённым правилам и переименованный в *.edl.
Каждая библиотека имеет имя и версию, а также может быть в рамках одной платформы,
модели телефона или даже прошивки.

Полезность сего очевидна. Во-первых эльфу не обязательно содержать громоздкий код
сложных ф-ий, а просто позаимствовать у загруженной однажды библиотеки.
Во-вторых значитильная скорость работы по сравнению с аналогичными API функциями, которые
уже вшиты в прошивку, т.е. в ROM.
В-третьих, так как существут межплатформенные различия, и поэтому надо вечно перекомпилировать
один и тот же эльф для разных платформ, нередко требуется знать эти межплатформенные особенности.
С EDL всё просто, сделал единый стандарт всех ф-ий, а для каждой платформы - своя EDL,
которя адаптирована к особенности соответствующей платформы.

Подробнее о EDL system можно узнать из исходников примеров и edl.c

2) SWIHOOK Control
Это обобщает в себе несколько приёмов по изменению swi-библиотеки в реальном времени.
Т.е. появилась возможность специально устанавливать swihook в RAM и спокойно
изменять неугодные ф-ии своими. Выведено несколько ф-ий по работе в этой области и даже
существует возможность запуска уже заменёных ф-ий, из запасной библиотеки не используя при
этом SWI прерывание, а так же существует возможность обратного восстановления конкретной функции
или исходной библиотеки.

Подробнее о SWIHOOK Control можно узнать из исходников примеров и ramlib.c и ALTSWI.asm

3) Заменён FUNC_ABORT

Идея взята из известного мода от danil e71.
Эта идея не просто скопирована, она расширена. При отсутствии ф-ии в библиотеке
(Когда обнаружвается 0xFFFFFFFF при вызове не 0x8XXX-подобной ф-ии) искуственный
пикофф заменяется сообщением с занесением в лог, при не однократном "необнаружении"
ф-ии сообщение не выводится, но лог попрежнему ведётся. Причём каждая запись в лог
сопровождается звуковым сигналом. Кроме номера недостающей ф-ии, пишется адрес её вызова.

Подробнее можно узнать из ramlib.c и logger.c

4) Управление ф-ями ELFPack
С помощью отправки GBS сообшений в процесс ELFPack Manager (HELPER) можно
вызвать реконфигурацию, повторный запуск EDL, Daemons, BLIB, очистить PNG-Кеш.

Подробнее можно узнать из gbsproc.c

5) Визуализация ошибочных запусков *.elf и *.edl

6) Мелкие изменения: модификация mfree - вместо пикоффа MemSFreeDeallocFail -> return 1

----------- Пути ----------
Демоны:
X:\Zbin\Daemons\*.elf
Графика:
X:\Zbin\IMG\*.png, elf_big.png, elf_small.png, edl_big.png, edl_small.png
EDL, swi.blib:
X:\Zbin\Libs\*.edl, swi.blib
BCFG Конфигурация:
X:\Zbin\etc\ELFPack.bcfg

X = 4 (MMC/MicroSD/SD/SDHC)
= 0 (Data)

/* Authors and Ideas: Dimadze and PICAS (Он же ?unknow?, I'am just crazy) */
P.S. Dimadze, сломал свой CX75, поэтому пока не починит или купит новый, ничего не сможет делать ...

(Предложение, сброситься форумом и купить ему новый(ые) телефон(ы), он этого заслужил..)

loquat 发表于 2010-12-5 18:13:36

EP 3.0.rar中有俄版S75和俄版E71的配置文件。

BingK 发表于 2010-12-8 18:09:31

这个移植不难,拿2.3的套进去就可以,只有一个地址MFREE_MOD要移植,还是没人愿意自己试一下等别人搞
主要增加的功能有
1. 支持动态库,使用*.edl格式
2. 支持swilib函数动态管理,开机的时候也可以修改函数
3. 新的FUNC_ABORT,缺少函数的时候,不会在死机信息里显示,而是记录到\\Zbin\\etc\\ep_log.log
4. 支持elfpack管理
5. 神马玩意?*.edl和*.elf文件拓展支持?
6. 修改了mfree函数

loquat 发表于 2010-12-8 20:01:22

2.这个应该就是以前老版本的swi.blib吧
5.就是完全看不懂edl是神马.附件里虽然有实例还是吧懂

问了一下,好像国外也只有少数SG x75的用这个。

loquat 发表于 2010-12-8 21:33:08

这个ELF可以让X65像E71一样支持PNG半透明图片 24位的 很绚丽
可惜能力不够不会搞啊
看国外的帖子好 ...
2301631 发表于 2010-12-8 20:45 http://www.0110.cn/images/common/back.gif

这个好像看到65区有人在用。

mengdie 发表于 2010-12-9 09:11:43

这个ELF可以让X65像E71一样支持PNG半透明图片 24位的 很绚丽
可惜能力不够不会搞啊
看国外的帖子好 ...
2301631 发表于 2010-12-8 20:45 http://bbs.0110.cn/images/common/back.gif


    半透明65区有了,要加刷一个drawhook补丁,死机可以弄成提示信息的有这个PickOFFMSG 记录在0:\error.log
这是源码

mengdie 发表于 2010-12-10 09:22:18

回复 3# BingK


    试着移植到s65和cx开不了机啊,都是watchdog maxtime,不知道怎么回事

BingK 发表于 2010-12-10 19:31:16

发你移植的上来看看

mengdie 发表于 2010-12-10 22:36:06

改的源码和补丁
竟然上传成功了,杯具,版主给那个删了吧
源码里只是把SL的文件改成cx的了

BingK 发表于 2010-12-11 20:14:25

把中文的ep2.3的esi.asm替换到这个ep3.0的esi.asm应该就可以了
在options-->assembler-->preprocessor-->Defined symbol里面加一句SGOLD_CN

其实就是在ESI_PATCH:下面加一句STMFD        SP!,{R4,LR}

mengdie 发表于 2010-12-12 10:44:43

回复 11# BingK


    冰大,按照你说的编译出来成功开机,就是不能显示中文,后来修改additional.c文件中unsigned int char8to16(int c)
{
if (c==0xA8) c=0x401;
if (c==0xAA) c=0x404;
if (c==0xAF) c=0x407;
if (c==0xB8) c=0x451;
if (c==0xBA) c=0x454;
if (c==0xBF) c=0x457;
if (c==0xB2) c=0x406;
if (c==0xB3) c=0x456;
if ((c>=0xC0)&&(c<0x100)) c+=0x350;
return(c);
}

void ascii2ws(char *s, WSHDR *ws)
{
int c;
while((c=*s++))
{
    wsAppendChar(ws,char8to16(c));
}
}
#ifdef NEWSGOLD
__arm void ESI(WSHDR *ws, int dummy, char *s)
#else
__arm void ESI(char *s, WSHDR *ws)
#endif
{
if (((unsigned int)s>>28)==0xA) //翌朦觐 耱痤觇 桤 钺豚耱?RAM/FLASH
{
    CutWSTR(ws,0);
    ascii2ws(s,ws);
}
else
{
    wsprintf(ws,"|%d|",s);
}
}改为下面的/*
unsigned int char8to16(int c)
{
if (c==0xA8) c=0x401;
if (c==0xAA) c=0x404;
if (c==0xAF) c=0x407;
if (c==0xB8) c=0x451;
if (c==0xBA) c=0x454;
if (c==0xBF) c=0x457;
if (c==0xB2) c=0x406;
if (c==0xB3) c=0x456;
if ((c>=0xC0)&&(c<0x100)) c+=0x350;
return(c);
}

voidascii2ws(char *s, WSHDR *ws)
{
int c;
while((c=*s++))
{
    wsAppendChar(ws,char8to16(c));
}
}*/
#pragma swi_number=0x242
__swi __arm void gb2ws(WSHDR *ws, const char *s, int len);
#ifdef NEWSGOLD
__arm void ESI(WSHDR *ws, int dummy, char *s)
#else
__arm void ESI(char *s, WSHDR *ws)
#endif
{
if (((unsigned int)s>>28)==0xA) //翌朦觐 耱痤觇 桤 钺豚耱?RAM/FLASH
{
//    CutWSTR(ws,0);
//   ascii2ws(s,ws);
   gb2ws(ws, s, strlen(s));
}
else
{
    wsprintf(ws,"|%d|",s);
}
}结果显示中文,不知道对不对

BingK 发表于 2010-12-12 10:57:13

就是这样

mengdie 发表于 2010-12-12 22:03:19

本帖最后由 mengdie 于 2010-12-17 11:22 编辑

总结一下,经过冰大的指点,总算有点进展了,移植到S65和CX65也可以显示中文了
1. 支持动态库,使用*.edl格式------------1.这个应该可以添加自定义函数,编写的ELF不用包含繁复的代码了,只需要从库中加载一次;2.没看懂;3.缩小平台差异,应该是针对各平台编写一个补充函数库,然后编写ELF的时候不用再针对个平台分别编写了。
2.Draw Handler System (新加的12月15更新的)新的绘图处理模块,这意味着你可以画整个手机的GUI,在这种情况下,画面不会“闪屏“,你也不必定时刷新屏幕了。
3. 支持swilib函数动态管理,开机的时候也可以修改函数------------不知道怎么修改
3. 新的FUNC_ABORT,缺少函数的时候,不会在死机信息里显示,而是记录到\\Zbin\\etc\\ep_log.log------------还没有遇见
4. 支持elfpack管理------------“ELFPack Manager (HELPER)”这个不知道是个ELF还是什么,应该可以实时修该刷新EDL, Daemons, BLIB, clean PNG-cache.
5. 神马玩意?*.edl和*.elf文件拓展支持?------------
6. 修改了mfree函数------------
总之就是稀里糊涂不会用,水平太低wap30::ii 传上来大家研究一下

这是源码,只是修改了cx70为S65,sl为cx65,各机型只要把EP2.3中的“rets_机型.asm”和“机型.xcl”文件替换过来就可以了,“机型.xcl”中MFREE_MOD要移植,因为这个版本还搞不懂怎么用,为了稳定的还是先用2.3或2.3drawhook版吧,2.3drawhook版+PickOFFMSG一样有半透明和不bi声死机

这是编译出来的s65和cx65的补丁

这是附带的ZBIN中的实验的elf和文件,其中有个SieIM貌似很强大,就是不知道怎么用,这些都是在1楼EP_3.0附件中都有的,也有源码

还有个XTASK,因为SGOLD刷了之后用原来的会死机,可能是keyhook的问题,这里提供了一个不死机的版本,还有CALC计算器也会死机
恩,就这样了

12月15日更新版本,增加了一个很好的功能,新的绘图处理模块
Processing system rendering. That is an opportunity to put your Drawing piano JULY
a handler that will run it before the moment of sen由于非常钦佩楼主,不得不说声好! data to the device display
for real output. This means you can paint over the entire phone GUI.
In this case, the picture will not "blink", you will not have to use a timer to keep
picture "afloat."

源码,还木移植,增加了两个DRAWHANDLER地址,上个版本里木有 NEWSGOLD的mfree函数,木有移植,这次把NEWSGOLD和ELKA的一起移植出来看看


需要增加两个swilib函数,cx753个typedef struct {
int w; / / Screen width
int h; / / screen height
RECT unk_rc; / /
RECT rc; / / Global boundary drawing
short * buf; / / Address of the screen buffer
int col; / / Something with color screen
/ / And more ...
} LCDLAYER;

LCDLAYER a structure (such global total 3: For the overlay, to MMI, and Bearer-Processes: Java, Browser etc), which give a pointer to f-uu:

LCDLAYER * Ram_LCD_Overlay_Layer
LCDLAYER * RAM_LCD_Layer_Base_Ptr

For SX75v25 found for Bearer (! c double pointer):
LCDLAYER ** RAM_LCD_Layer_Bearer_Ptr ()

CX75v25: 0xA84D2058 (Maybe it 0xF7 ad由于非常钦佩楼主,不得不说声好! there is still empty on all platforms)


//------------------------------------------------ ---

/ / Applies to clipboard DRWOBJ, but not forcibly redraw the screen
# pragma swi_number = 0x02F0
__swi __arm int PushDRWOBJOnLAYER (DRWOBJ *, LCDLAYER *);


SX75v25: 0xA089A4E8 1
S75v52: 0xA0971A92 1
E71v45: 0xA09485D6 1

/ / Force redraw the screen from LCDLAYER
# pragma swi_number = 0x02F1
__swi __arm int LCDRedrawLAYER (LCDLAYER *);

SX75v25: 0xA089C14E 1
S75v52: 0xA0973792 1
E71v45: 0xA094A2DC 1

------------------------
And yes, substitute appearances for the correct address here is that f-uu to CX75v25, here is a must:
01E4: 0xA07FD027; 079: DrawObject2Layer (LCD_Layer *, DRWOBJ *);

mengdie 发表于 2010-12-13 09:20:34

本帖最后由 mengdie 于 2010-12-13 10:45 编辑

回复 15# 2301631


    没有吧,我测试的时候没有撤销Drawhook,原来那个版本,不刷Drawhook,只有xtask会半透明吧,这个感觉好像是快了些,不要用动画效果,心理作用吧




楼下已加你QQ

2301631 发表于 2010-12-13 10:01:56

本帖最后由 2301631 于 2010-12-24 18:30 编辑

回复2301631


    没有吧,我测试的时候没有撤销Drawhook,原来那个版本,不刷Drawhook,只有xtask会 ...
mengdie 发表于 2010-12-13 09:20 http://bbs.0110.cn/images/common/back.gif

    感谢梦蝶兄弟移植,要不然就用不上这么好的补丁了效果见下图!


mendie修改的源码已上传到SVN
loquat 发表于 2010-12-13 10:21 http://bbs.0110.cn/images/common/back.gif
楼下的辛苦啦想不到loquat兄弟也还在为西机耕耘啦


这个数字时钟很帅,怎么弄的那么大一个字体出来的
lh19567 发表于 2010-12-14 12:21 http://bbs.0110.cn/images/common/back.gif
ELF区找一个名为Bigdigitalclock的ELF文件,记得不错的话,是啊冰大侠发布的!
节约论坛资源 图片下载见这个帖子http://bbs.0110.cn/viewthread.php?tid=397056&extra=page%3D1

各机型要增加两个swilib
当运行ELF缺少所需函数是记录在Zbin\\etc\\ep_log.log中,就是这样的,说 ...
梦蝶 发表于 2010-12-19 16:30 http://bbs.0110.cn/images/common/back.gif

寂寞的高手啊 我来补上CX7Av25的lib吧!


CX7Av25
+0FD4000
#pragma enable old_equal_ff
0BC0: 0xA00D6E39 ; 2F0: __swi __arm int PushDRWOBJOnLAYER (DRWOBJ *, LCDLAYER *)
0BC4: 0xA00DBCFF ; 2F1: __swi __arm int LCDRedrawLAYER (LCDLAYER *)
#pragma disable old_equal_ff
+0

loquat 发表于 2010-12-13 10:21:05

mendie修改的源码已上传到SVN

lh19567 发表于 2010-12-14 12:21:21

回复 17# 2301631

这个数字时钟很帅,怎么弄的那么大一个字体出来的

laohan 发表于 2010-12-14 13:44:08

附件里的安卓图标如何使用呢?

mengdie 发表于 2010-12-14 13:53:47

回复2301631

这个数字时钟很帅,怎么弄的那么大一个字体出来的
lh19567 发表于 2010-12-14 12:21 http://bbs.0110.cn/images/common/back.gif


    clock.elf自定义数字图片

附件里的安卓图标如何使用呢?
laohan 发表于 2010-12-14 13:44 http://bbs.0110.cn/images/common/back.gif


    好像是那个UpdateManager用的

梦蝶 发表于 2010-12-16 18:08:17

本帖最后由 梦蝶 于 2010-12-19 17:55 编辑

12月17日
俄网12月15更新的,暂时移植了几个机型,没别的flash,回去再看,先存这
源码






一个测试用的ELF,有趣的东东,按中键,咔嚓一声屏幕烂了,哭去吧wap71::ii
效果图



12月19日
更新一下














sgold使用旧版XTask死机的,同时运行这个文件
页: [1] 2 3
查看完整版本: ELFPack 3.0 alpha的源码,懂的人去修改吧