1.程序开发中模块开发什么意思呢?
2.luaä¸çexeå¨åªï¼
3.wireshark2次开发
4.探索 Lua5.2 内部实现:编译系统(1) 概述
5.phpç¨çä»ä¹è½¯ä»¶
程序开发中模块开发什么意思呢?
模块就是根据开发内容划分,比如会员模块,购物模块,新闻模块,广告模块
在交互模式下, Lu a 不断的多周期共振点主图指标源码显示提示符,并等待下一行输入。 一旦读到一行, 首先试着把这行解释为一个表达式。 如果成功解释,就打印表达式的值。 否则,将这行解释为语句。 如果你写了一行未完成的语句, 解释器会用一个不同的提示符来等待你写完。
当脚本中出现了未保护的错误, 解释器向标准错误流报告错误。 如果错误对象并非一个字符串,但是却有元方法 __tostring 的话, 解释器会调用这个元方法生成最终的消息。 否则,解释器将错误对象转换为一个字符串,并把栈回溯信息加在前面。报名源码下载
如果正常结束运行, 解释器会关闭主 L ua 状态机 ( l。a_close)。 脚本可以通过调用 os.exit 来结束,以回避这个步骤。
为了让 L ua 可以用于 Unix 系统的脚本解释器。 独立版解释器会忽略代码块的以 # 打头的第一行。 因此,Lu a 脚本可以通过 chmod +x 以及 #! 形式变成一个可执行文件。 类似这样
(当然, Lu a 解释器的位置对于你的机器来说可能不一样。 如果 lu a 在你的 PATH 中, 写成
这里我们列出了把程序从 Lua 5.2 迁移到 Lua 5.3 会碰到的不兼容的地方。 你可以在编译 Lua 时定义一些恰当的选项(), 来回避一些不兼容性。 然而,这些兼容选项以后会移除。
Lua 的版本更替总是会修改一些 C API 并涉及源代码的改变。 例如一些常量的数字值,用宏来实现一些函数。 因此,你不能假设在不同的进云源码 Lua 版本间可以做到二进制兼容。 当你使用新版时,一定要将使用了 Lu a API 的客户程序重新编译。
同样,Lu a 版本更替还会改变预编译代码块的内部呈现方式; 在不同的 Lu a 版本间,预编译代码块不兼容。
官方发布版的标准路径也可能随版本变化。
Lua 5.2 到 Lua 5.3 最大的变化是引入了数字的整数子类型。 虽然这个变化不会影响“一般”计算, 但一些计算 (主要是涉及溢出的) 会得到不同的结果。
你可以通过把数字都强制转换为浮点数来消除差异 (在 Lu a 5.2 中,所有的数字都是浮点数)。 比如你可以将所有的常量都以 .0 结尾, 或是使用 x = x + 0.0 来转换一个变量。 (这条建议仅用于偶尔快速解决一些不兼容问题; 这不是一条好的编程准则。 好好写程序的话,你应该在需要使用浮点数的地方用浮点数, 需要整数的地方用整数。)
把浮点数转为字符串的地方,现在都对等于整数的浮点数加了 .0 后缀。 (例如,浮点数 2.0 会被打印成 2.0, 而不是java源码读 2。) 如果你需要定制数字的格式,就必须显式的格式化它们。
(准确说这个不是兼容性问题, 因为 Lua 并没有规定数字如何格式化成字符串, 但一些程序假定遵循某种特别的格式。)
分代垃圾收集器没有了。 (它是 Lu a 5.2 中的一个试验性特性。)
luaä¸çexeå¨åªï¼
ä½ ä¸è½½çæ¯æºä»£ç åºè¯¥ä¸è½½äºè¿å¶æ件ï¼
ç´æ¥å°ç¾åº¦ä¸æç´¢ï¼LuaForWindows_v5.1.4-.exe
æè è¿å ¥ www.lua.org
ä¾æ¬¡åå»ä¸é¢å 项ï¼
download
左边binary ä¸é¢ç lua for windows
Download Lua_V5.1.4-.exe from Google Code
wireshark2次开发
在公司项目中,我们需构建报文解析器以提升性能。现有代码为C#,但筛选功能与Wireshark相比差距显著,整合两者能实现完美解决方案。Wireshark支持C和Lua二次开发,考虑到工程量与兼容性,选择Lua进行开发。
面临的问题在于,现有C#代码与Wireshark的Lua解释器在C层交互存在局限,直接调用困难。解决策略是:Lua调用C,再由C调用C#,通过多层调用来实现功能集成。然而,分页效果源码网上资料多为复制粘贴,且多基于过时API,引发诸多问题。因此,本文旨在分享实践经验,帮助后继开发者避免踩坑。
第一步:Lua调用C
需确保Wireshark使用的Lua版本与代码兼容。通过require“动态链接库名称”,Lua可调用C函数。关键在于正确调用API,由于Lua版本差异,API功能会有所不同。
首先,从官网上下载对应Lua源码,建立工程并添加源码,生成Lua解释器用于测试。生成Lua解释器时,需生成lib和dll文件,否则会报错。为了确保与Wireshark兼容,替换Wireshark中的dll。
生成dll时,应注意以下几点:
1. 移除源码中的luac.c、luac.h文件后再编译。
2. 在预处理器定义中输入LUA_BUILD_AS_DLL以同时生成dll和lib文件。
3. 针对较低版本(如5.2.4)的编译错误,输入特定警告(例如)。
完成dll生成后,使用测试Lua解释器进行基本验证。
第二步:C调用C#
创建dll项目,设置属性以兼容C#(选择对应版本)。在C++文件中引用lua头文件,配置链接器属性与生成dll时相同。
编写代码时,需注意extern"C"以避免未知标识符错误,并使用using添加C# dll。使用lua_State指针进行C与Lua之间的交互。
将函数注册到Lua环境中,以便在脚本中调用。编写测试代码验证功能。
第三步:整合Wireshark插件
编写Wireshark插件代码,参考官方示例。构建Lua.dll、C的test.dll和C# ParserTool.dll,并将它们放入Wireshark根目录。确保覆盖重复的Lua.dll。将.lua文件放入Wireshark安装路径下的plugins文件夹。运行后,验证插件功能。
至此,通过以上步骤,实现C#与Lua的高效集成,提升报文解析器性能。此过程涉及复杂调用链路,但遵循文档与实践经验,可有效避免常见问题。希望本文能为后续开发者提供实用参考。
探索 Lua5.2 内部实现:编译系统(1) 概述
Lua 是一种轻量级、高效率的语言,其编译系统的实现至关重要。Lua 的编译过程需要将符合语法规则的chunk转换为可运行的closure,这一过程需要高效且巧妙的设计。closure对象是Lua运行时的函数实例,proto对象则代表了closure的原型,存储着函数的大部分信息,包括闭包与proto之间的关系,以及chunk与closure之间的对应关系。
编译系统的任务是将chunk转换为运行时可执行的closure。在这一过程中,需要理解chunk和closure的关系,以及chunk如何生成mainfunc proto,再为这个proto创建一个closure。每一个function statement都会生成一个对应的proto,并保存在外层函数的子函数列表中。所有最外层的function statement的proto会被保存到mainfunc proto的子函数列表中,形成以mainfunc为根节点的proto树。
编译系统被划分为三个模块:词法分析、语法分析和指令生成。Lua使用手写分析器进行词法和语法分析,以提高效率。词法分析将源代码拆分成token,供语法分析使用。语法分析采用“递归下降”的方法,生成最终的指令,构建proto树,即整个编译过程。
词法分析模块相对简单,主要任务是将源代码分解为token。Token包括类型和语义信息,用于后续的语法分析。Lua的全局状态信息由LexState结构体保存,它不仅包含词法分析状态,还包含了整个编译系统的全局状态。
语法分析和指令生成是整个编译过程的核心。语法分析器驱动整个编译过程,生成最终指令。分析过程中,词法分析器生成指令,直接用于构建proto树。编译过程中,使用FuncState结构体来保存函数的编译状态数据,这些数据会随着函数的压栈和弹栈进行保存和恢复。全局数据Dyndata用于保存每个FuncState对应的局部变量描述列表、goto列表和label列表。
编译系统的全局状态信息存储在LexState中,包含当前编译函数的FuncState和全局的Dyndata数据。FuncState通过f引用Proto,保存生成指令的列表。h引用一个table,用于生成常量表,当遇到常量时,查找表中是否存在该常量,以节省内存。编译过程会创建和销毁FuncState和BlockCnt,以管理函数和块的层次结构。
在整个语法分析过程中,Lua按照深度优先的顺序遍历FuncState树和BlockCnt树,只保存当前处理的编译状态,以减少内存使用。在分析过程中,Lua不构建完整的语法树对象,而是将过程中的语法结构保存在函数栈中,分析完成后立即丢弃。长跳转等异常处理机制用于处理错误,确保编译状态数据在出错时自动销毁。
在C stack中保存编译状态数据的原因与异常处理机制相关,使用longjump机制处理错误,确保所有当前的编译状态数据在出错时自动销毁。
phpç¨çä»ä¹è½¯ä»¶
phpç¨çä»ä¹è½¯ä»¶ï¼
phpç¨ç软件æï¼
ä¸ãPHPéæå¼åç¯å¢ï¼IDEï¼
1ãZend Studio
è¿æ¯PHPå®æ¹zendå ¬å¸å¼åçä¸æ¬¾PHPéæå¼åç¯å¢ï¼ä¹æ¯æHTMLåjsæ ç¾ï¼ä½åªå¯¹PHPè¯è¨æä¾è°è¯æ¯æãå 为æ¯åä¸ä¸ªå ¬å¸ç产åï¼æ以æä¾çZend Frameworkæ¹é¢çæ¯ææ¯å ¶ä»è½¯ä»¶å¥½ãZend Studio5.5ç³»ååï¼å®æ¹æ¨åºå©ç¨äºEclipseå¹³å°ï¼åºäºPDTçZend Studio for Eclipse 6.0ï¼ä¹åççæ¬ä¹é½æ建äºEclipseãå ¶ä¼ç¹ä¸»è¦æ以ä¸å ç¹ï¼
(1).强æåçå¼åç¯å¢æé«ç产åï¼éè¿å®å ¨çPHP5æ¯æãç¼ç åæå¨ãç¼ç ç»ååè½ãè¯æ³æ£ç´¢ã项ç®ç®¡çå¨ãç¼ç ç¼è¾å¨ãç»å¾è°è¯å¨ï¼å导ï¼ãè¶ å¼ºæºè½ç¼ç ï¼å ·å¤æ°çåæ´ä¼ç§çåæåä¼åå·¥å ·åPHPç¼ç æ£æµå¨ãPHPçæ åè®°å½å·¥å ·ï¼PHPæ档记å½å¨ï¼é常容æè®°å½PHP代ç ãç¨åºåºç¨åæ¹æ¡ãFTPåSFTPç»åç®åé ç½®ï¼ä½¿å¼åè å®å ¨å°ä»è¿ç¨æå¡å¨çµæ´»çä¸è½½åä¸è½½é¡¹ç®æ件ã
(2).é«æ°´å¹³çåå¡åºç¨å¼åç´æ¥é¾æ¥æ广æ³ä½¿ç¨çä¸ä¸æ°æ®åºï¼åIBMDB2/Cloudscape/DerbyãMySQLãOracleãMicrosoftSQL Server, PostgreSQLå SQLiteãéè¿ä½¿ç¨å¸¦ SQL å è¯æ³æ£ç´¢æ¯æçZend SQL Query Editorï¼å°è¢«é¾æ¥æå¡å¨ä¸è¿è¡ååæ§è¡ç¨åºç访é®ãç¨Zend SQL Explorerå¯ è§çæ°æ®åºç»æå管çå 容ã
(3).PHPå®æ´çè°è¯ç¯å¢å è¿çè°è¯ç¹å¾ä¼å¿ï¼å æ¬ï¼Conditional Breakpoints, Stack Trace View, Advanced Watches, Variables and Output Bufferå©ç¨æ强大çPHPè°è¯å¨å¨æ¬å°æè¿ç¨è°è¯æ¬å°çç¯å¢ã对äºæ¬å°è°è¯æè æ¯åºäºäºèç½çè¿ç¨è°è¯é½è½å¤ç¡®ä¿å®å ¨è¿æ¥ç¨âä¸æ¬¡ç¹å»æµè§å¨è°è¯âä»æµè§å¨ç´æ¥è°è¯ååæç¼ç ã
(4).强æåçå¢éå¼åå管çå·¥å ·ä»Zend Studio å ç´æ¥åºç¨CVSï¼éè¿ææå°ç®¡çæºä»£ç ï¼å®¹æè¿è¡å¢éçå¼åä¸åä½ãå©ç¨ç»¼åæ§è½ç¼è¾å¨ï¼çè§è®¿é®åè½ï¼ä¼ååºç¨ç¨åºçæ»ä½æ§è½ãZend Studio ä¸Zend Platform ç»å使ç¨æ¶ï¼å¯ä»¥å®æ¶è·å¾ä»£ç åèæ¬æ§è½çåé¦ã
该IDEç®åææ°çæ¬ä¸ºZend Studio .0.0ï¼ä¸è½½å°åï¼/
3ãDreamweaver
æ¯ä¸ªåæ¬ç±Macromediaå ¬å¸æå¼åçèåç½ç«å¼åå·¥å ·ãå®ä½¿ç¨æè§å³æå¾çæ¥å£ï¼äº¦æHTMLç¼è¾çåè½ãå®ç°å¨æMacåWindowsç³»ç»ççæ¬ãéMacromedia被Adobeæ¶è´åï¼Adobeä¹å¼å§è®¡åå¼åLinuxçæ¬çDreamweaveräºã DreamweaverèªMXçæ¬å¼å§ï¼ä½¿ç¨äºOperaçæçå¼æ "Presto" ä½ä¸ºç½é¡µé¢è§ã
ä»MXå¼å§ï¼DWå¼å§æ¯æPHP+MYSQLçå¯è§åå¼åï¼å¯¹äºåå¦è ç¡®å®æ¯æ¯è¾å¥½çéæ©ï¼å 为å¦ææ¯ä¸è¬æ§å¼åï¼å ä¹æ¯å¯ä»¥ä¸åä¸è¡ä»£ç ä¹å¯ä»¥ååºä¸ä¸ªç¨åºï¼èä¸é½æ¯æè§å³æå¾çãæå å«çç¹å¾å æ¬ï¼è¯æ³å 亮ãå½æ°è¡¥å ¨ï¼å½¢åæ示çãä¸è¿DWçæç代ç æ¯è¾å¤æï¼å®å ¨æ§ä¹ä¸è¬ãå¨æåçæ¹é¢ï¼æ¹ä¾¿åº¦ä¸è¬ï¼å¨è°è¯ç¯å¢æ¹é¢è¡¨ç°å·®å¼ºäººæãä¸å¤ªéåäºæ¯è¾å¤æä¸ç¹çç¼ç¨ãä½å¯¹äºåå¦ç人æ¯å好ä¸è¿äºã
DWæ¯æ使ç¨ç第ä¸ä¸ªç½ç«å¼åå·¥å ·ï¼è³ä»æççµèéé¢è¿æå®è£ ã该软件ææ°ç为Dreamweaver CS6ï¼ä¸è½½å°åï¼/cfusion/tdrc/index.cfm?product=dreamweaver&loc=zh_tw
äºãPHP代ç ç¼è¾å¨ï¼Editorï¼
1ãEditplus
EditPlus(æåç¼è¾å¨)æ±åçä¸å¥åè½å¼ºå¤§ï¼å¯å代记äºæ¬çæåç¼è¾å¨ï¼EditPlusæ¥ææ éå¶çæ¤æ¶ä¸éåãè±ææ¼åæ£æ¥ãèªå¨æ¢è¡ãåæ°æ è®°ãæ寻å代ãåæ¶ç¼è¾å¤æ件ãå ¨å±å¹æµè§åè½ãèå®è¿æä¸ä¸ªå¥½ç¨çåè½ï¼å°±æ¯å®æçè§åªè´´æ¿çåè½ï¼è½å¤åæ¥äºåªè´´æ¿èªå¨å°æåç²è´´è¿ EditPlus çç¼è¾çªå£ä¸ï¼è®©ä½ çå»ç²è´´çæ¥éª¤ãå¦å¤å®ä¹æ¯ä¸ä¸ªé常好ç¨çHTMLç¼è¾å¨ï¼å®é¤äºæ¯æé¢è²æ è®°ãHTML æ è®°ï¼åæ¶æ¯æCãC++ãPerlãJavaï¼å¦å¤ï¼å®è¿å 建å®æ´çHTML&CSS1æ令åè½ï¼å¯¹äºä¹ æ¯ç¨è®°äºæ¬ç¼è¾ç½é¡µçæåï¼å®å¯å¸®ä½ èçä¸å以ä¸çç½é¡µå¶ä½æ¶é´ï¼è¥ä½ æå®è£ IE 3.0 以ä¸çæ¬ï¼å®è¿ä¼ç»åIE æµè§å¨äºEditPlusçªå£ä¸ï¼è®©ä½ å¯ä»¥ç´æ¥é¢è§ç¼è¾å¥½çç½é¡µ(è¥æ²¡å®è£ IEï¼ä¹å¯æå®æµè§å¨è·¯å¾)ãå æ¤ï¼å®æ¯ä¸ä¸ªç¸å½æ£åå¤ç¨éå¤ç¶æçç¼è¾è½¯ä»¶ã
å ¶ä¸»è¦ç¹ç¹æï¼
(1).é»è®¤æ¯æHTMLãCSSãPHPãASPãPerlãC/C++ãJavaãJavaScriptåVBScriptçè¯æ³é«äº®æ¾ç¤ºï¼éè¿å®å¶è¯æ³æ件ï¼å¯ä»¥æ©å±å°å ¶ä»ç¨åºè¯è¨ï¼å¨å®æ¹ç½ç«ä¸å¯ä»¥ä¸è½½ï¼å¤§é¨åè¯è¨é½æ¯æï¼ã
(2).EditPlusæä¾äºä¸Internetçæ ç¼è¿æ¥ï¼å¯ä»¥å¨EditPlusçå·¥ä½åºåä¸æå¼Intelnetæµè§çªå£ã
(3).æä¾äºå¤å·¥ä½çªå£ãä¸ç¨åæ¢å°æ¡é¢ï¼ä¾¿å¯å¨å·¥ä½åºåä¸æå¼å¤ä¸ªææ¡£ã
(4).æ£ç¡®å°é ç½®Javaçç¼è¯å¨âJavacâ以å解éå¨âJavaâåï¼ä½¿ç¨EditPlusçèåå¯ä»¥ç´æ¥ç¼è¯æ§è¡Javaç¨åº
å®æ¹ææ°çæ¬ï¼V3..ï¼ä¸è½½å°åï¼/
2ãNotepad++
Notepad++æ¯ä¸å¥é常æç¹è²çèªç±è½¯ä»¶ç纯æåç¼è¾å¨ï¼æå®æ´çä¸æåæ¥å£åæ¯æ´å¤å½è¯è¨æ°åçåè½(UTF8 ææ¯)ãå®çåè½æ¯Windowsä¸ç Notepad(è®°äºç°¿)强大ï¼é¤äºå¯ä»¥ç¨æ¥å¶ä½ä¸è¬ç纯æå说ææ件ï¼ä¹ååéåå½ä½æ°åçµèç¨åºçç¼è¾å¨ãNotepad++ ä¸ä» æè¯æ³é«äº®åº¦æ¾ç¤ºï¼ä¹æè¯æ³æå åè½ï¼å¹¶ä¸æ¯æ´å®ä»¥åæ©å åºæ¬åè½çå¤æ模ç»ã
Notepad++æ¯ä¸æ¬¾é常æç¹è²çç¼è¾å¨ï¼æ¯å¼æºè½¯ä»¶ï¼å¯ä»¥å 费使ç¨ãæ¯æçè¯è¨: C, C++ , Java , C#, XML,Ada, HTML, PHP, ASP, AutoIt, æ±ç¼, DOSæ¹å¤ç, Caml, COBOL, Cmake, CSS, D, Diff, ActionScript, Fortran, Gui4Cli, HTML, Haskell, INNO, JSP, KIXtart, LISP, Lua, Makeå¤ç(Makefile), Matlab, INIæ件, MS-DOS Style, NSIS, Normal text, Objective-C, Pascal, Javascriptã
å ¶ä¸»è¦åè½ç¹ç¹æï¼
(1).æå°æè§å³æå¾ï¼å¦ææ彩è²æå°æºï¼ä½ å¯ä»¥æä½ çæºä»£ç 以å¤ç§é¢è²æå°åºæ¥ã
(2).ç¨æ·å¯èªå®ä¹ç¼ç¨è¯è¨ï¼èªå®çç¼ç¨è¯è¨ä¸ä» æè¯æ³é«äº®åº¦æ¾ç¤ºåè½ï¼èä¸æè¯æ³æå åè½åè½ã注éãå ³é®ååè¿ç®ç¬¦å·ä¹å¯ä»¥èªå®ä¹ã
(3).ç¨æ·è½åèªå·±çAPIå表ï¼æä»ä¸è½½ä¸åºä¸è½½éè¦çapiæä»¶ï¼ ãä¸æ¦apiæ件建ç«å®æä¸å¨æ£ç¡®çè·¯å¾ç³»ç»ï¼é®å ¥Ctrl+Spaceï¼ä½ å¯ä»¥ä¿®æ¹è¿ä¸ªå¿«æ·é®ï¼å¯å¨åè¯èªå¨å®æåè½ã欲ç¥æ´å¤ä¿¡æ¯ï¼è¯·åèåè¯èªå¨å®æåè½å¨çº¿å¸®å©ã
(4).æ¯æåæ¶ç¼è¾å¤æ件:å¯ä»¥åæ¶å¼å¯å¤é¡µé¢æ¥ç¼è¾ãæ¯æå¤éè§çªåæ¥ç¼è¾:å¯åæ¶æ两个è§çªå¯¹æ¯æåãä¸ä½è½å¼å¯ä¸¤ä¸ªä¸åæ件å¨åå«ä¸¤ä¸ªä¸åççªå£ï¼å¹¶ä¸è½å¼å¯ä¸ä¸ªåç¬æ件å¨ä¸¤ä¸ªä¸åçè§çªå (clone mode)è¿è¡åæ¥ç¼è¾ãåæ¥ç¼è¾çææå°å¨ä¸¤ä¸ªççªå£å åæ¶æ´æ°ã请åèåæ¥ç¼è¾ç»é¢ã
(5).èªå¨æ£æµå¼å¯æ件ç¶æ:å¦æå¤é¨ä¿®æ¹ï¼æå é¤ï¼Notepad++å·²å¼å¯æ件ï¼ç¨æ·å°ä¼è¢«éç¥æ´æ°æ件å 容ï¼æå é¤æ¡£æ¡ï¼ã
(6).é«äº®æ¬å·å缩æè¾ å©:å½å æ 移è³ä¸åå符{ } [ ] ( )ææ¶ï¼æ¤å符ä¸è¿æ¹ç¸å¯¹åºçå符以å缩æè¾ å©ï¼å¦æåå¨çè¯ï¼å°ä¼ä»¥é«äº®æ¥æ¾ç¤ºã
æ´å¤å·¥å ·ä¸è½½è¯·åå¾PHPå·¥å ·ä¸è½½ç«ï¼/xiazai/gongju