找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 1900|回复: 9

[写号相关] 据ce-star成功解决700w/xw中文短信后的详细分析(原理篇)

[复制链接]
发表于 2008-6-17 11:26 | 显示全部楼层 |阅读模式
昨天晚上通过ce-star解决700w后发觉非常不稳定.1 O1 D7 t: p/ ]/ ?) w% j

  a# _0 j" ?" Y( S然后和K大聊天后试着分析一下ce-star的工作原理
0 j( c  w8 E) m. l9 Xce-star安装包里面的两个重要文件* K, P$ J) [9 e0 B) ?% L2 P
tilmsghok.dll 和 SMSProvider_CDMA.dll; d5 i3 y( H; e
tilmsghok.dll分析后发现应该是用coredll.dll 来钩住 TelephonyInterfaceLayer.dll 的8 Z6 }2 h5 T' A
用IDA分析tilmsghok.dll 发现几个地方出现重要函数6 K+ C# [/ Y" g
DisableThreadLibraryCalls
0 ~0 `7 J* ^, s+ y: PSetKmode和SetProcPermission; L6 W4 N( J/ N8 W8 s4 k
下面文章有说明上面函数的作用3 p9 p# S( ]  B) p8 n1 q
http://www.chinaeda.cn/show.aspx?id=13498&cid=494 l5 f" L1 J* i: X! H  v
Windows CE跨进程内存注入之实践  S. \" u! H! Y! b7 ]3 R. N
8 N8 n' _* ^) H
因此猜想工作原来是用dll来钩住TelephonyInterfaceLayer.dll 里的相关程序影响发送和接受sms时的处理
; T; J" S/ S0 e@2008-6-17 by yourhe 第一次修改
6 M0 d# d! P& s: v" {1 a1 \1 u  I6 Q3 h* a6 k; a/ N+ X5 V
4 O5 c8 M  n2 J7 d5 @) i
通过ce-star 安装文件cestar.set发现2 ^. ~# k5 O4 x% w) ?4 ]/ E1 x6 `* {- L
;[Registry.Common:%WINDIR%\TelephonyInterfaceLayer.dll]0 q$ s- e  `( h6 P/ B8 z
;HKEY_LOCAL_MACHINE,Comm\Cellular\SMS\Protocols\Text,"DLL","SmsProvider_CDMA.dll"
. l  Q% k! c9 p* s) b3 R5 q! RCellular\SMS 证明应该是发送接受短信是调用SmsProvider_CDMA.dll 改变文本编码 然后通过tilmsghok.dll 改变发送接受结果" v9 ?5 e3 h4 D+ c: [
@2008-6-17 by yourhe 第二次修正
' j( F* J- `" D/ S- U

( H0 u% [6 ]- a: m4 u  Z/ E$ G; E9 h目前通过ce-star发送短信非常不稳定,发送的界面内按什么键都tmail.exe报错退出.
) j+ D$ f, ^- V4 G! DCellular\SMS说明了调用了什么与tmail.exe冲突.
, G8 o8 k7 A/ L$ h2 U& b  e1 \# J提供一个思路. 能否切换tmail.exe的加载顺序 来改善重启后又不能发短信的问题?6 a1 W: t  j4 H/ X
@2008-6-17 by yourhe 第三次修正
5 C: z0 @- @4 ]; E' m$ D& Y1 o- n5 Z
希望各位有兴趣继续改进700w短信功能的兄弟给点意见或者建议,或许可以通过大家的努力完全实现中文短信) k, i0 W5 l. h, g) R3 j

/ D7 q9 _3 H( d2 J9 j3 r6 X[ 本帖最后由 yourhe 于 2008-6-17 22:19 编辑 ]

评分

参与人数 2威望 +25 收起 理由
卒子 + 20 精品文章
克韩 + 5 谢谢分享

查看全部评分

 楼主| 发表于 2008-6-17 11:27 | 显示全部楼层

发送短讯异常不知会否是由于DisableThreadLibraryCalls导致的

发送短讯异常不知会否是由于DisableThreadLibraryCalls导致的& O) c/ W, `# [" t* U) c9 c
症状6 R" [' w# b% ?1 F: T; e( m
如果您创建一个 DLL 调用 " DisableThreadLibraryCalls " 以防调用是 " DllMain " 为每线程创建 / 终止并对多线程 CRT 链接, 如果它创建和销毁许多线程并从这些线程调用 DLL 过程会泄漏内存。 您将看到增加的 " 专用字节 " 的过程。
4 P7 O$ Y$ p# f; A! g的泄漏大小取决于使用 CRT。 但对于 VC7.1 最小是对于 VC8 大约 140 个字节大约每线程 532 字节。 它可能甚至函数根据使用 CRT 具有更加分配数据。 如果有长运行应用程序如果过程创建并销毁多线程, 这可能指向问题。- t! |8 f/ r: B( L) D) \) V- L1 g! X

. k, k+ m, g6 |% I回到顶端4 A1 _4 d0 B  J, K- F$ a* L

0 v2 h% d: `2 ]( X3 z7 j; Q6 f原因
. E3 ]$ ^/ R$ q# F对于若干 CRT 函数非常必要, CRT 是内部逐个线程分配内存。 如果 CRT 函数需要使用该内存并为当前线程, 尚未分配此内存分配内部内存要求并 - TLS (线程本地存储) 或 FLS - (光纤本地存储) 插槽中存储指针。 如果调用 " _endthread(ex) " 是正常释放这些内存。 9 n& |3 [# T5 c6 S; o2 ]
但如果线程超出 DLL, 创建静态 CRT 内 DLL 知道没有关于此线程。 如果未为当前线程分配内部内存它只分配内存。 只有方法以防止此泄漏是来欣赏 " DLL_THREAD_DETACH " " DllMain " 调中。 如果被销毁线程调用此函数。 CRT 可查看如果它已用于该线程分配内部内存然后可释放它。
4 x. S8 k0 O2 r0 \0 ?3 u* F% C现在如果调用 " DisableThreadLibraryCalls " 的 " DLL_THREAD_DETACH " 通知防止到 DLL。 因此 CRT 具有对发布内部内存没有更改。
0 `, Q7 M/ _$ l/ M$ q' f' V6 u: `8 S  C9 g
回到顶端& x+ _+ x+ _2 C8 ~3 a+ ]) ?3 p- _

5 J3 I7 ?, T' U" t9 N' t解决方案
8 n; @0 _8 l# Y; i3 K4 w要解决此问题, 您有两种选择:; N9 l0 J  K2 N+ @5 C: V; ]! d
  不要调用 " DisableThreadLibraryCalls "
* h! R' i8 l/ S9 o2 h  对 DLL 版本 CRT 链接
发表于 2008-6-17 12:23 | 显示全部楼层
很透彻 不错,谢谢分享
发表于 2008-6-17 12:45 | 显示全部楼层
学习了,哪天买了700W就能用上了
 楼主| 发表于 2008-6-17 15:28 | 显示全部楼层
通过ce-star 安装文件cestar.set发现
; y8 K5 S. B; ]& L, ]/ P  X, W1 |7 c4 A
;[Registry.Common:%WINDIR%\TelephonyInterfaceLayer.dll]
' a, n7 _6 |+ J1 S; O;HKEY_LOCAL_MACHINE,Comm\Cellular\SMS\Protocols\Text,"DLL","SmsProvider_CDMA.dll"
( X% |* E4 N: d! _# s! X
* T+ u7 m% `# \& W# R( wCellular\SMS 证明应该是发送接受短信是调用SmsProvider_CDMA.dll 改变文本编码 然后通过tilmsghok.dll 改变发送接受结果
8 ^3 B& K) [1 Q6 K5 R
8 f# Y. \$ E0 N: ?@2008-6-17 by yourhe 第二次修正
发表于 2008-6-17 20:33 | 显示全部楼层
一看就是专业人士!
 楼主| 发表于 2008-6-17 22:20 | 显示全部楼层
目前通过ce-star发送短信非常不稳定,发送的界面内按什么键都tmail.exe报错退出.$ c! q5 {: m- c% E: |  Y3 _

  O+ i+ _- V5 yCellular\SMS说明了调用了什么与tmail.exe冲突.
! E4 H0 Y3 \  N$ \2 S
0 ]9 W' Q* }4 ~, ~  f- ~提供一个思路. 能否切换tmail.exe的加载顺序 来改善重启后又不能发短信的问题?
  Q' b; H& ^% L# l; C0 d@2008-6-17 by yourhe 第三次修正
发表于 2008-6-18 04:23 | 显示全部楼层
发送短信异常的问题已经解决,是原来ROM中sms_provider.dll的一个BUG导致。因为还没法定制ROM,所以已经制作了补丁程序。
发表于 2008-6-18 10:29 | 显示全部楼层
楼上的都是高手,佩服,致敬!
发表于 2008-6-23 19:22 | 显示全部楼层
何时等到650阿   
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|吹友吧 ( 京ICP备05078561号 )

GMT+8, 2024-12-23 05:39 , Processed in 0.326209 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表