找回密码
 加入我们

QQ登录

只需一步,快速开始

帖子
查看: 1927|回复: 9

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

[复制链接]
发表于 2008-6-17 11:26 | 显示全部楼层 |阅读模式
昨天晚上通过ce-star解决700w后发觉非常不稳定.
( P8 i; ]3 _( v
) {' b; g2 H% Q& q+ B然后和K大聊天后试着分析一下ce-star的工作原理7 p3 k" L1 W2 R( }
ce-star安装包里面的两个重要文件8 |( l2 Z6 E. P6 ?6 n! ~
tilmsghok.dll 和 SMSProvider_CDMA.dll7 ?3 {/ e8 E# m) u
tilmsghok.dll分析后发现应该是用coredll.dll 来钩住 TelephonyInterfaceLayer.dll 的
3 _+ F* |/ o2 v/ s用IDA分析tilmsghok.dll 发现几个地方出现重要函数6 Q, W7 B2 z  r0 y( c
DisableThreadLibraryCalls/ s5 _& _3 n. m/ u3 |& x* k
SetKmode和SetProcPermission
* d6 Q! S4 U6 Q: f: |下面文章有说明上面函数的作用
1 d) X: H: y7 D7 z/ W1 E2 C- Z( c( xhttp://www.chinaeda.cn/show.aspx?id=13498&cid=49
8 W8 ^& v9 w, f. GWindows CE跨进程内存注入之实践
6 y3 ^% b: f: {% }2 O5 f, n
( M0 }+ V6 X4 |  G7 ?因此猜想工作原来是用dll来钩住TelephonyInterfaceLayer.dll 里的相关程序影响发送和接受sms时的处理
" R! ~% u; @; n5 G0 p" G@2008-6-17 by yourhe 第一次修改9 b# f* r3 n, J3 a1 i! m' Y
) x2 X# C" h' S: P! \
- V$ k: ?& j% A! K3 q9 @
通过ce-star 安装文件cestar.set发现
( F& a0 y& s4 b" i' o- j$ S;[Registry.Common:%WINDIR%\TelephonyInterfaceLayer.dll]# p* u0 a" ^( e' C
;HKEY_LOCAL_MACHINE,Comm\Cellular\SMS\Protocols\Text,"DLL","SmsProvider_CDMA.dll"
3 c9 m/ y; v9 C0 g8 M/ l- q0 @Cellular\SMS 证明应该是发送接受短信是调用SmsProvider_CDMA.dll 改变文本编码 然后通过tilmsghok.dll 改变发送接受结果
0 N' j  T! {, v  S, n, e@2008-6-17 by yourhe 第二次修正" X6 R- j  g, j9 @/ ]/ C6 Z
" Y% F& S% l1 S9 }
目前通过ce-star发送短信非常不稳定,发送的界面内按什么键都tmail.exe报错退出.) b( u& M0 m4 z" p; w' D; B
Cellular\SMS说明了调用了什么与tmail.exe冲突.+ G1 q) M1 U7 V; [
提供一个思路. 能否切换tmail.exe的加载顺序 来改善重启后又不能发短信的问题?
: U3 y: L# k/ j/ @@2008-6-17 by yourhe 第三次修正
' w' M" O$ `. Z. N, N
% p3 ^5 \+ S2 Q1 a5 P( R希望各位有兴趣继续改进700w短信功能的兄弟给点意见或者建议,或许可以通过大家的努力完全实现中文短信
; O# j$ n, Y# W5 M7 \- R1 O5 u3 N! f, b1 F7 {! J% S+ @
[ 本帖最后由 yourhe 于 2008-6-17 22:19 编辑 ]

评分

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

查看全部评分

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

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

发送短讯异常不知会否是由于DisableThreadLibraryCalls导致的
1 M* C6 c; ^( p9 U/ g6 `: [症状
8 c+ x* i: l3 @% G如果您创建一个 DLL 调用 " DisableThreadLibraryCalls " 以防调用是 " DllMain " 为每线程创建 / 终止并对多线程 CRT 链接, 如果它创建和销毁许多线程并从这些线程调用 DLL 过程会泄漏内存。 您将看到增加的 " 专用字节 " 的过程。. v$ U$ G4 x- p7 C8 B7 m
的泄漏大小取决于使用 CRT。 但对于 VC7.1 最小是对于 VC8 大约 140 个字节大约每线程 532 字节。 它可能甚至函数根据使用 CRT 具有更加分配数据。 如果有长运行应用程序如果过程创建并销毁多线程, 这可能指向问题。. s/ i# G6 o2 a  a1 b3 v, Y/ \2 A
, [0 T" c- w3 Y3 `; v6 {% V5 l
回到顶端
0 t7 q- o7 U* Q7 b  p
" @. W5 |, z0 p+ q原因! \- A: m3 K# Z  p1 a. [  \4 }
对于若干 CRT 函数非常必要, CRT 是内部逐个线程分配内存。 如果 CRT 函数需要使用该内存并为当前线程, 尚未分配此内存分配内部内存要求并 - TLS (线程本地存储) 或 FLS - (光纤本地存储) 插槽中存储指针。 如果调用 " _endthread(ex) " 是正常释放这些内存。
& ]8 h5 c1 X/ p: w- O3 _但如果线程超出 DLL, 创建静态 CRT 内 DLL 知道没有关于此线程。 如果未为当前线程分配内部内存它只分配内存。 只有方法以防止此泄漏是来欣赏 " DLL_THREAD_DETACH " " DllMain " 调中。 如果被销毁线程调用此函数。 CRT 可查看如果它已用于该线程分配内部内存然后可释放它。+ `* m" L; H# k$ m
现在如果调用 " DisableThreadLibraryCalls " 的 " DLL_THREAD_DETACH " 通知防止到 DLL。 因此 CRT 具有对发布内部内存没有更改。
* ^  [. X1 g- j5 J+ B
6 v5 ~2 [8 p- Z( ]- v回到顶端( ]  G4 b& Y1 P; r0 |4 ]* V3 D& ^
4 [1 e; X# D! U5 L6 [
解决方案
8 E; ]1 r  |6 l! D$ r& Y+ r) \7 e要解决此问题, 您有两种选择:
0 S  [+ k" i9 `7 C) @  不要调用 " DisableThreadLibraryCalls " * i2 }% d) M2 ~" J1 a1 U
  对 DLL 版本 CRT 链接
发表于 2008-6-17 12:23 | 显示全部楼层
很透彻 不错,谢谢分享
发表于 2008-6-17 12:45 | 显示全部楼层
学习了,哪天买了700W就能用上了
 楼主| 发表于 2008-6-17 15:28 | 显示全部楼层
通过ce-star 安装文件cestar.set发现
4 ~% E* v; @7 L2 n& m' `3 r+ O2 }: K8 M; _  [& {
;[Registry.Common:%WINDIR%\TelephonyInterfaceLayer.dll]
1 B5 V" |2 i! F5 X: B$ T: q7 `6 |;HKEY_LOCAL_MACHINE,Comm\Cellular\SMS\Protocols\Text,"DLL","SmsProvider_CDMA.dll"
0 W$ F1 O' n$ }/ I
0 w4 k0 }+ ?7 CCellular\SMS 证明应该是发送接受短信是调用SmsProvider_CDMA.dll 改变文本编码 然后通过tilmsghok.dll 改变发送接受结果
5 u; T5 B! v' E! i* H! _, z' i3 Z6 C6 H
@2008-6-17 by yourhe 第二次修正
发表于 2008-6-17 20:33 | 显示全部楼层
一看就是专业人士!
 楼主| 发表于 2008-6-17 22:20 | 显示全部楼层
目前通过ce-star发送短信非常不稳定,发送的界面内按什么键都tmail.exe报错退出.8 Q' L  b, h1 h) i

# I! X7 ~. K; B* NCellular\SMS说明了调用了什么与tmail.exe冲突.5 l$ u' n' _% p( O$ `% O7 o9 y3 h
. j! r/ R+ N  q; b, o
提供一个思路. 能否切换tmail.exe的加载顺序 来改善重启后又不能发短信的问题?: o, U% q$ A' `- C7 ~
@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, 2025-4-7 13:24 , Processed in 0.330172 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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