前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于pb decompiler的搜索

c++builder RichEdit的源码显示之亮显(附代码) - chengg0769 来自四川,在东莞虚度十载 - 博客频道 - CSDN.NET chengg0769 来自四川,在东莞虚度十载 PB反编译_Powerbuilder DeCompiler_PB反编译器_PB混淆器_PB加密 目录视图 摘要视图 订阅 【大声说出你的爱】CSDN社区情人节特别活动 专访李云:从通讯行业的架构师到互联网“新兵” 电子版《程序员》杂志免费领 c++builder RichEdit的源码显示之亮显(附代码) 2009-09-16 18:49 958人阅读 评论(0) 收藏 举报 c++builderlistcharacterintegerdeletestruct 因为要在richEdit中显示pb源码,故写了亮显代码。因为只做显示,无需编辑,所以不想借用控件,那样升级维护比较麻烦。 图先:基本和pb中看到的效果一直,而且处理了数字(整数和小数),枚举常量。注释,字符串优先处理。 /*附属定义 const int KEYWORD_QTY = 140; const int KEYWORD_MAXLEN = 15 ,KEYWORD_MINLEN = 2; short KeyWordOffset[KEYWORD_MAXLEN]; //用于指示某个长度的关键字的开始处,免得从第一个关键字循环找,效率低 struct strc_KEYWORD{ int iLen; int tcolor; int iFont; char szKEYWORD[20]; }; strc_KEYWORD KEYWORD_LIST[KEYWORD_QTY &#43; 1]={ //关键字只贴若干个.. 4,clPurple,1,"blob", 7,clPurple,1,"boolean", 4,clPurple,1,"char", 9,clPurple,1,"character", 4,clPurple,1,"date", 8,clPurple,1,"datetime", 7,clPurple,1,"decimal", 3,clPurple,1,"dec", 6,clPurple,1,"double", 7,clPurple,1,"integer", 3,clPurple,1,"int", 4,clPurple,1,"long", 8,clPurple,1,"longlong", 4,clPurple,1,"real", 6,clPurple,1,"string", 4,clPurple,1,"time", 15,clPurple,1,"unsignedinteger", 4,clPurple,1,"uint", 11,clPurple,1,"unsignedint", 11,clPurple,1,"unsignedlong", 5,clPurple,1,"ulong", 3,clPurple,1,"any" } 在create事件中把KEYWORD_LIST冒泡排序,按长度从小到大。 KeyWordOffset[]用来指示某个长度的关键字的开始offset,比如KeyWordOffset[6] = 50 代表长度为6的关键字排在第50位开始的地方 */ //注意如下的代码中,单引号内的字符的右斜要变为左斜,我粘贴上来,这个控件自动变为右斜线了。注意! void __fastcall TForm1::HighLightTxtEx(TObject *Sender) { //高亮显示文本,提示关键字; //显示模式分关键字,数据类型两大模式。 int iLenOfText; int ibegin = 0,iend = 0; TFontStyles StyleProcess; StyleProcess = TFontStyles()<<fsBold; bool bISdecimal; //注意:文件最开头和 0x20,0x0D,0x0A,0x09作为词语分隔符。 iLenOfText = RichEditSource ->Text.Length(); if (iLenOfText < 20) return; iLenOfText -=2; //最后2字符总是0D0A,所以为了防止越界。可以减少2个。 char *pText = new char[iLenOfText]; memcpy(pText,RichEditSource ->Text.c_str(),iLenOfText); //转成指针可能比较快 LockWindowUpdate(Handle); //不要这一句。 for(int i = 0;i < iLenOfText;i &#43;&#43;){ Application->ProcessMessages(); //******注意这里,如果代码很长比如超过5页,不释放消息的话会很卡。 //增加这一句后,看起来感觉上是刷的一下就着色好了,但只是个错觉, //因为我们&#30524;睛看到的是第一页,而且鼠标最开始操作的也是第一页。如果 //你迅速拉到最后一页,可以发现程序着色还是进行。但是释放消息能够提高 //响应,我们也不会一下子看到最尾的地方。基本可用。 //当然如果是代码是可编辑状态,那只需要处理从当前光标处到后面的亮显即可。 //就比如我们在编程时输入/*,后面就会全部变成蓝色。但是我们&#30524;睛其实在3s时间 //左右,只能看到当前位置的一页左右,所以释放消息都应该可以的。 //优先是注释 //判断到一个注释,要用内循环增加指针,直到结束。这样不要靠外循环去判断。很麻烦。 //2种注释:2F 2F &#43; 0D 0A (优先,因为 //* */ 也是//优先。谁先出现谁优先。跟字符串一起是一个道理,抢先式。 //2F 2A &#43; 2A 2F if(*(pText &#43; i) == '/x2F' && *(pText &#43; i &#43; 1) == '/x2F'){ ibegin = i; //循环直到行末 i &#43;=2; while( !(*(pText &#43; i)== '/x0D' && *(pText &#43; i &#43; 1) == '/x0A')){ i &#43;&#43;; } iend = i - ibegin; //高亮显示; RichEditSource ->SelStart = ibegin; RichEditSource ->SelLength = iend ; RichEditSource ->SelAttributes->Color = clSilver; RichEditSource ->SelAttributes->Style = StyleProcess; continue; //不要往下检查,而应该for到下一个i&#20540; } if(*(pText &#43; i) == '/x2F' && *(pText &#43; i &#43; 1) == '/x2A'){ ibegin = i; //循环直到行末 i &#43;=2; while( !(*(pText &#43; i)== '/x2A' && *(pText &#43; i &#43; 1) == '/x2F')){ i &#43;&#43;; } iend = i - ibegin; //高亮显示; RichEditSource ->SelStart = ibegin; RichEditSource ->SelLength = iend ; RichEditSource ->SelAttributes->Color = clSilver; RichEditSource ->SelAttributes->Style = StyleProcess; continue; //不要往下检查,而应该for到下一个i&#20540; } //其次是字符串 if(*(pText &#43; i) == '/"'){ ibegin = i; //循环直到行末 i &#43;&#43;; while(true){ //如果有转义符,不算退出,还是在字符串内 if(*(pText &#43; i)== '~'){ i &#43;=2; } if(*(pText &#43; i)== '/"'){ break; } i&#43;&#43;; } iend = i - ibegin &#43;1; //高亮显示; RichEditSource ->SelStart = ibegin; RichEditSource ->SelLength = iend ; RichEditSource ->SelAttributes->Color = clMaroon; RichEditSource ->SelAttributes->Style = StyleProcess; continue; //不要往下检查,而应该for到下一个i&#20540; } //捕获数字 (整数和小数,指数) if(*(pText &#43; i) > '/x2F' && *(pText &#43; i) < '/x3A'){ ibegin = i; //循环直到行末 i &#43;&#43;; bISdecimal = false; while(true){ if(*(pText &#43; i) == '/x2E' || *(pText &#43; i) == '/x45'){ bISdecimal = true; i &#43;&#43;; }else if(*(pText &#43; i) > '/x2F' && *(pText &#43; i) < '/x3A'){ i &#43;&#43;; }else{ break; } } iend = i - ibegin; //高亮显示; RichEditSource ->SelStart = ibegin; RichEditSource ->SelLength = iend; if(bISdecimal){ RichEditSource ->SelAttributes->Color = clGray; }else{ RichEditSource ->SelAttributes->Color = clNavy; } RichEditSource ->SelAttributes->Style = StyleProcess; continue; //不要往下检查,而应该for到下一个i&#20540; } //再次是一般语句 //逐个取词语,包括起始位置和长度,便于与关键字比较。 //关键字是以"_"和字母开头的。 //如何定义是一个字以内呢?1.必须是字母,而且小写(程序生成的关键字都是小写,可以保证,无需转换),只要遇到不是字母的,退出 //1.如果不是在词内,进入词状态,并直到词的结束(非小写字母,比如空&#26684;,括号,逗号,句号,回车,点符号等) if (('/x60' < *(pText &#43; i) && '/x7B' > *(pText &#43; i)) || '/x5F' == *(pText &#43; i)){ ibegin = i; //非字母数字结束 while(('/x40' < *(pText &#43; i) && '/x5B' > *(pText &#43; i)) || ('/x2F' < *(pText &#43; i) && '/x3A' > *(pText &#43; i)) || ('/x60' < *(pText &#43; i) && '/x7B' > *(pText &#43; i)) || '/x5F' == *(pText &#43; i)){ i &#43;&#43;; } //如果是枚举,以感叹号结束 if(*(pText &#43; i)== '/x21'){ //设置为枚举的颜色 //高亮显示; iend = i &#43;1 - ibegin; RichEditSource ->SelStart = ibegin; RichEditSource ->SelLength = iend; RichEditSource ->SelAttributes->Color = clNavy; RichEditSource ->SelAttributes->Style = StyleProcess; continue; } iend = i - ibegin; //对比关键字 ,KEYWORD_LIST已排序数组 if(iend > KEYWORD_MAXLEN || iend < KEYWORD_MINLEN) continue; //上下限长度 for(int kkk=KeyWordOffset[iend -1];kkk< KEYWORD_QTY;kkk&#43;&#43;){ if (KEYWORD_LIST[kkk].iLen > iend) break; //在排序数组内已经无法找到该长度了。 if (KEYWORD_LIST[kkk].iLen == iend){ if (memcmp(pText &#43; ibegin,KEYWORD_LIST[kkk].szKEYWORD,iend)==0){ //高亮显示; RichEditSource ->SelStart = ibegin; RichEditSource ->SelLength = iend; RichEditSource ->SelAttributes->Color = (TColor)KEYWORD_LIST[kkk].tcolor; RichEditSource ->SelAttributes->Style = StyleProcess; //找到后要退出循环比较。 break; } } } } } //取消选择 RichEditSource ->SelStart = 0; RichEditSource ->SelLength = 0; LockWindowUpdate(0); //不要这一句 delete [] pText; pText = NULL; } 更多 上一篇:反向工程之四则混合运算优先级判断--加括号问题 下一篇:Powerbuilder PBrecovery deecompiler已经在pb9,10,11,115的基础上完成编程 相关主题推荐 c++builder 源码 冒泡排序 application character 查看评论 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料 chengg0769 访问:529189次 积分:8720分 排名:第430名 原创:268篇 转载:211篇 译文:0篇 评论:348条 文章搜索 文章分类 PB反编译与加密(12) IOS和安卓(9) PB与数据库(10) 网络相关(1) 搜索相关(0) 闲话扯起耍(1) 其他语言(4) 文章存档 2014年01月(1)2013年12月(2)2013年11月(2)2013年09月(1)2013年02月(1)2012年11月(1)2012年09月(1)2012年08月(6)2012年07月(1)2012年05月(3)2012年03月(4)2011年12月(2)2011年11月(2)2011年10月(9)2011年09月(6)2011年08月(11)2011年07月(2)2011年06月(4)2011年04月(3)2010年12月(1)2010年10月(2)2010年09月(8)2010年08月(1)2010年07月(8)2010年06月(17)2010年05月(2)2010年04月(2)2010年03月(4)2010年01月(1)2009年09月(8)2009年08月(5)2009年07月(8)2009年06月(8)2009年05月(16)2009年03月(2)2009年02月(7)2008年12月(2)2008年11月(4)2008年10月(5)2008年08月(1)2008年07月(2)2008年01月(12)2007年12月(29)2007年11月(7)2007年10月(4)2007年09月(20)2007年08月(55)2007年07月(176) 阅读排行 搜索引擎学习资源(作者:dongdonglang)(14661) 做代理网站最有效的4种宣传方法(admin9.com)(12214) 再谈powerbuilder程序防止破解的办法(终结篇,以后不再写这个问题)(8263) 程序员的SEO总结(7479) PowerBuilder DeCompiler(pb decompiler) Demo download(PB反编译,支持5-12)(6147) 浅谈Powerbuilder的未来和Powerbuilder使用者的未来(6138) 在一台联想3000G430 T1600笔记本上安装黑苹果(东皇v10.6.3)成功(6025) PB11.5,PB12 web项目初探(5751) 文件夹加密原理 [转](5712) powerbuilder反编译器开发-第一步:pbd结构分析和pbkiller分析(5629) 评论排行 浅谈Powerbuilder的未来和Powerbuilder使用者的未来(49) 程序员的SEO总结(32) 有关Powerbuilder的悲观论和乐观论(由郭贴引发的300多贴争辩想到的,也是很久就想秉明的一个观点)(22) Powerbuilder混淆,加密(powerbuilder防止反编译,pb混淆器,PB加壳,支持5-12) obfuscator for PowerBuilder(20) 戏说DataWindow的“移植”和“临摹”(19) 因为垄断形成,数据库市场将出现更多开源数据库(19) 免费软件模式之随想(18) PB11.5,PB12 web项目初探(15) 软件提交到国外的下载站的几点操作和想法(15) 关于对pbd反编译器的期待(11) 推荐文章 最新评论 安装两个BCB6控件SynEdit、mwEdit 0.92a的过程总结 jiduxiaozhang12345: 请问BCB6的第三方控件在哪下载啊?急求 Powershield一个疑似的BUG zhj149: 高手啊,看你的文章,感觉你玩pb已经到了极致的境界了,我自认为pb还不错,和你比起来,还是差了太多了 软件提交到国外的下载站的几点操作和想法 u012353953: 楼主在吗?有个问题请教,看到请加我QQ,谢谢。17493589 Lucene(Nutch)距离商业文本搜索引擎还有多远?(转载) koubi1986: 你好!请教一些问题:请问一下1。你是如何把nutch抓取到的二进制内容,在项目中读取的。2。nutc... 看一个商业共享软件是如何在下载站刷下载量来作弊的! u011506701: 您的判断是有误的,像我研究的刷量算法你就根本看不出来,出现的曲线图跟正常的一模一样的,附:刷量是最好... 垂直搜索引擎蜘蛛的基本解决方案(编程实例:所以推荐) gis101989: 你好,我正在写面向主题搜索引擎结合地理信息的论文,很多地方不懂,能加个扣扣吗?非常感谢你的帮助,我的... 浅谈Powerbuilder的未来和Powerbuilder使用者的未来 hosthelp: PB的最大缺点就是:(其实很简单)过时了。 服装过时就没人穿了, 电器过时就没人买了, 明星过时(过... 三岁小孩开发搜索引擎,搜索引擎白热化[原创] rongzi1987: 顶一个。先顶再看 再谈powerbuilder程序防止破解的办法(终结篇,以后不再写这个问题) hua2000: 顶顶更健康正在研究反向工程 有个傻B说破解了我的软件—哈哈!黄金屋手机MP3.MP4.3GP.电影.下载系统 ljx811216: 真有这事,看看 我的未来方向 pconline/asp.net周金桥老师的aspnet 友人Blog 旧博客在sina Bluesen的语音卡开发平台 JackXu的开源语音卡框架 经验丰富的好友:杨光的专栏 蓝星际语音平台,Koodoo语言 Lucene改造者-yuetiantian 西部.阿呆's blog manesking:全文检索c/c fullfocus研究lucene,nutch 黄国酬的博客 把“天轰穿”的asp.net 雨松.安卓