找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 1896|回复: 9

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

[复制链接]
发表于 2008-6-17 11:26 | 显示全部楼层 |阅读模式
昨天晚上通过ce-star解决700w后发觉非常不稳定./ I; _# [" M5 Y
# b& j1 y3 t! A% F1 ~& @% j
然后和K大聊天后试着分析一下ce-star的工作原理$ O" ^" Q. s, T4 l9 }" v; u- z, p- [7 ]% i
ce-star安装包里面的两个重要文件$ U9 ~% v1 k5 N* k
tilmsghok.dll 和 SMSProvider_CDMA.dll9 L6 \' H- p8 a
tilmsghok.dll分析后发现应该是用coredll.dll 来钩住 TelephonyInterfaceLayer.dll 的
, Z) m6 \2 d3 V4 J用IDA分析tilmsghok.dll 发现几个地方出现重要函数  D! ?% Z' @' R/ P1 k
DisableThreadLibraryCalls% q1 c' f, v; D
SetKmode和SetProcPermission: H; n& S2 b- Z* Z4 K+ z) \
下面文章有说明上面函数的作用: [$ y. T/ k1 f1 x- L! A" F
http://www.chinaeda.cn/show.aspx?id=13498&cid=49& ~1 u: p" n- |  B
Windows CE跨进程内存注入之实践& F2 Y& e" T1 B9 X! B- t

3 A$ q6 v% _7 ]. a因此猜想工作原来是用dll来钩住TelephonyInterfaceLayer.dll 里的相关程序影响发送和接受sms时的处理
% N: M* e; z' P( B3 x* X. t# J@2008-6-17 by yourhe 第一次修改# q! ?# r8 D9 F! z

: P  M+ o, N' k& `' m$ y* H7 N+ w9 ?/ V2 |
通过ce-star 安装文件cestar.set发现
# n4 R: |4 O7 w4 I4 z* I; E/ [;[Registry.Common:%WINDIR%\TelephonyInterfaceLayer.dll]
; Z7 a9 k. ?& H1 I( @' L;HKEY_LOCAL_MACHINE,Comm\Cellular\SMS\Protocols\Text,"DLL","SmsProvider_CDMA.dll"8 i2 g# m# b6 @4 `* T7 p1 E0 `5 p
Cellular\SMS 证明应该是发送接受短信是调用SmsProvider_CDMA.dll 改变文本编码 然后通过tilmsghok.dll 改变发送接受结果" ?$ S0 K" P; l3 Y$ [
@2008-6-17 by yourhe 第二次修正
# V6 e% j, C2 a4 y2 d8 I
+ K8 S/ m6 k3 ~6 y; ?8 \! A
目前通过ce-star发送短信非常不稳定,发送的界面内按什么键都tmail.exe报错退出.: h- n1 j: C$ D% n" r( n, s
Cellular\SMS说明了调用了什么与tmail.exe冲突.0 j/ Z1 U" _# _1 A6 y/ b! S
提供一个思路. 能否切换tmail.exe的加载顺序 来改善重启后又不能发短信的问题?4 k# O' S, U1 f  _' i
@2008-6-17 by yourhe 第三次修正
4 N; g( W! m0 A, J
3 M0 ?# b8 |4 o希望各位有兴趣继续改进700w短信功能的兄弟给点意见或者建议,或许可以通过大家的努力完全实现中文短信
$ |3 J( @" n7 u" ~7 }1 w3 r! [8 p. L" p* ?' U
[ 本帖最后由 yourhe 于 2008-6-17 22:19 编辑 ]

评分

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

查看全部评分

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

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

发送短讯异常不知会否是由于DisableThreadLibraryCalls导致的7 D+ z7 k% ^7 q) ?' L7 H/ f
症状# K+ O# g' B$ I% @* f3 L" M
如果您创建一个 DLL 调用 " DisableThreadLibraryCalls " 以防调用是 " DllMain " 为每线程创建 / 终止并对多线程 CRT 链接, 如果它创建和销毁许多线程并从这些线程调用 DLL 过程会泄漏内存。 您将看到增加的 " 专用字节 " 的过程。7 g+ v+ V- [0 W4 F
的泄漏大小取决于使用 CRT。 但对于 VC7.1 最小是对于 VC8 大约 140 个字节大约每线程 532 字节。 它可能甚至函数根据使用 CRT 具有更加分配数据。 如果有长运行应用程序如果过程创建并销毁多线程, 这可能指向问题。. E7 X& {% M) T) `1 @6 c3 Z, A
$ c1 P+ ^7 J' n+ {9 q" }4 m
回到顶端
% c# f; i! H3 M. O* E, g4 Q
' H' ^# J) P' N3 V4 t( s原因
- N( G$ d! {( H! u) A. K对于若干 CRT 函数非常必要, CRT 是内部逐个线程分配内存。 如果 CRT 函数需要使用该内存并为当前线程, 尚未分配此内存分配内部内存要求并 - TLS (线程本地存储) 或 FLS - (光纤本地存储) 插槽中存储指针。 如果调用 " _endthread(ex) " 是正常释放这些内存。   |& x. e3 i: k& S- j' D
但如果线程超出 DLL, 创建静态 CRT 内 DLL 知道没有关于此线程。 如果未为当前线程分配内部内存它只分配内存。 只有方法以防止此泄漏是来欣赏 " DLL_THREAD_DETACH " " DllMain " 调中。 如果被销毁线程调用此函数。 CRT 可查看如果它已用于该线程分配内部内存然后可释放它。; c$ E! ~" E$ G5 P3 F
现在如果调用 " DisableThreadLibraryCalls " 的 " DLL_THREAD_DETACH " 通知防止到 DLL。 因此 CRT 具有对发布内部内存没有更改。
7 ~# l* X* o4 E3 F5 i3 e: |
( q$ U% \- s/ q回到顶端+ q5 z3 c$ T' Z: q7 S0 v. F3 K4 b

$ K) r* w2 z- \. k9 V; y解决方案
8 Q: ?: |' [2 X4 t# l9 n要解决此问题, 您有两种选择:* }/ @! m) A' ~' O
  不要调用 " DisableThreadLibraryCalls "
& f. {& B! v9 b. }) R4 P9 e  o  对 DLL 版本 CRT 链接
发表于 2008-6-17 12:23 | 显示全部楼层
很透彻 不错,谢谢分享
发表于 2008-6-17 12:45 | 显示全部楼层
学习了,哪天买了700W就能用上了
 楼主| 发表于 2008-6-17 15:28 | 显示全部楼层
通过ce-star 安装文件cestar.set发现& y6 ]! x) `  P! u9 g

, c, j, W# l/ e( d% L0 T;[Registry.Common:%WINDIR%\TelephonyInterfaceLayer.dll]" R/ x1 u+ t: Y4 {0 ]- A. A
;HKEY_LOCAL_MACHINE,Comm\Cellular\SMS\Protocols\Text,"DLL","SmsProvider_CDMA.dll"
% g7 }1 A9 Z) v5 n0 G- D+ ]3 e) h0 ~6 q% m/ X4 j
Cellular\SMS 证明应该是发送接受短信是调用SmsProvider_CDMA.dll 改变文本编码 然后通过tilmsghok.dll 改变发送接受结果
; r. H2 I2 o: B% H; t
/ ~0 ]: h7 l. R3 l@2008-6-17 by yourhe 第二次修正
发表于 2008-6-17 20:33 | 显示全部楼层
一看就是专业人士!
 楼主| 发表于 2008-6-17 22:20 | 显示全部楼层
目前通过ce-star发送短信非常不稳定,发送的界面内按什么键都tmail.exe报错退出.5 ^1 Q2 `- Z8 W" r; D/ F
. M0 K7 E) ?$ G* d/ O
Cellular\SMS说明了调用了什么与tmail.exe冲突.& P2 c" o3 D! r, W: @2 |

! f5 s  X8 Z+ ]6 b提供一个思路. 能否切换tmail.exe的加载顺序 来改善重启后又不能发短信的问题?
3 Q4 h  b# I( j. U& b4 }2 n8 m@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-11-16 04:15 , Processed in 0.296044 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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