再谈CSHELL对C程序员的价值
几个礼拜前,介绍了CSHELL。http://www.cnblogs.com/hhao020/p/4974542.html今天再试着介绍下,希望能有更多C程序员留意到它,从中获益。
很多年前,我在调试程序或是排查系统故障的时候,就希望有个SHELL。理想中,它应该是这个样子:
从exe文件读取elf符号,在内存中生成符号表表;
开启一个SHELL交互界面,接受修改变量或是函数的命令行;
要能够允许用户使用复杂的C语法,做到C程序编程一样;
用户回车后,自动从符号表找到相关函数,或是变量对应地址,然后执行;
函数的参数列表会被正确解析;
所有的非静态或内联的函数,变量,只要是代码里有的,都应该能在这个界面使用;
最好,能支持脚本,批量执行函数。
那些年,哥苦苦研究,但限于技术面的不足,始终未能找到入手方法。最接近的,也就是让在编码时,hardcode一组函数;而SHELL界面,则是如一般SHELL技术那样,要求按照严格的格式输入,依赖strcmp等字符处理技术判断如何调用函数。其中的限制和无奈,在此不赘述。
再后来,哥开始做VxWorks开发。做过vxWorks的人都应该知道WindShell,那东西真心好,让无数程序员爱不释手。哥也很喜欢啊,它就是理想中的那个SHELL,写上几个函数,编译一下,就能在SHELL下直接运行测试,真的方便的很;甚至有时候,要计算点东西,也会用WindShell,特别是编程过程中查16进制和10进制数的转换,或是某个字符的ascii值。
但哥终究是不那么容易被满足的程序员,很快就研究明白windshell的原理。涉及几个主要知识:
1,编译技术,比如LEX 词法分析、YACC 语法生成等;
2,ELF文件格式,以及GCC编译过程和链接技术;
3,某个脚本语言,处理文本必需要。
当然,C语言知识和Makefile知识是必须的,当然,C语言或是Makefile不过关的也没做SHELL的需求。
这三块技术,只有ELF格式和编译链接技术略有研究,另外两项都需要潜心研究。
脚本语言,哥选择了Perl入手,最开始的时候,是考虑Java和Python来着,因为算是有点基础;但很快改变了想法,对于复杂的文本处理来说,Perl可能才是王道。这期间,断断续续经历了好几个月,才算学成Perl,虽然不能说随心所欲的用Perl和正则表达式,但终于不再磕磕碰碰了。下次给大家介绍个自己用Perl做的Lex,Yacc,证明下哥没撒谎。
编译技术就没么容易了,首先要学理论。惭愧,工作后发现大学错过了两样东西:数学和编译原理。高等数序和离散数学没学好,让前些年做系统分析时缺了支柱;幸好编译原理要容易点,自学了一段时间后,终于有所领悟。说到这,倒是提醒玩正则表达式的同学们,记得学点编译原理的词法技术,否则写正则表达式很难摆脱花拳绣腿的尴尬。
接下来,是研究LEX和YACC的运用。这个挺难,网上有很多很多介绍的,十有八九是抄来抄去的一样的东西,偶尔不一样的,也只是谈及皮毛,根本没什么参考价值,跟小编写出来骗大爷大妈的医学养生文章一个水平。当然也就牛叉的,讲的云里雾里,可就是没个实例,全是理论介绍,再仔细一瞧,丫的所谓原创竟然是把LEX和YACC的技术文档摘录翻译出来。就这样,大概挣扎了几个月,一步步积累后,哥终于明白LEX和YACC怎么用了。
接下来的过程就比较自然了,用了一两个周末和晚间休息时间,哥终于做出了CSHELL。最开始规划的时候,还预留了if,while这些逻辑控制,以及cshell下的宏操作支持;但后来发现,价值不是很大,实现需要的时间也蛮多的,就暂时放弃了。或许将来会做吧!
为了方便cshell移植,又花了一个周末将其模块化,整合到项目makefile里。然后,又花了个把钟头,把p_readelf.pl从perl版的zlib中独立出来,以便于大家更容易的移植cshell到自己的项目中。
哥前两天写的trace文章,阅读量破千,但CSHELL却没几个。其实,如果trace是一屌丝,那CSHELL绝非一般高富帅,它们所能带来的价值也是天上地下!
献上cshell的词法文件,供有志于研究lex的同学参考:
http://files.cnblogs.com/files/hhao020/cshell.l.rar
欢迎lex学习者留言探讨。
再谈CSHELL对C程序员的价值的更多相关文章
- 浅谈Android移动开发程序员的职业发展之路
现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年 ...
- 浅谈月薪3万 iOS程序员 的职业规划与成长!(进阶篇)
前言: 干了这么多年的iOS,虽然接触了许多七七八八的东西.技术,但是感觉本身iOS却没有什么质的飞越,可能跟自己接触的项目深度有关,于是决定在学习其他技术的同时,加强自己在iOS方面的学习,提高自己 ...
- 月薪3万的程序员告诉你:这样工作才能拿高薪(转 IT之家)
习惯即刻回报 他不懂得只有春天播种,秋天才会有收获.刚刚付出一点点,甚至还没有付出,就想要得到回报.技术刚刚掌握,能一边百度一边干活了就觉得该拿到多少多少钱了.找工作先想着多少多少钱,入职了没干几个月 ...
- 谈谈Java程序员进阶的那些知识和方向
谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...
- PHP 程序员危机(转载)
感谢有这样的机会,能和大家一起来聊聊开发者的那些事儿. 其实程序员危机是一个真实存在的问题.也有人说是互联网行业的下滑或者互联网行业已过了风口等等.我在这儿主要谈的是 PHP 程序员的危机,而这种危机 ...
- 程序员需要经纪人吗?10x 最好的程序员其生产力相当于同行的 10 倍~
原文地址 10x 起源于技术界一个流行的说法,即最好的程序员是超级明星,其生产力相当于同行的 10 倍: Google 园区以好玩的设施闻名:小憩舱.球坑.按摩.干洗.随便吃到饱的自助餐.(为了拍人才 ...
- 9大行为导致Java程序员薪资过低, 你有几个?
Java程序员薪水有高有低,有的人一个月可能拿30K.50K,有的人可能只有2K.3K.同样有五年工作经验的Java程序员,可能一个人每月拿20K,一个拿5K.是什么因素导致了这种差异?本文整理导致J ...
- DevStore分享:月薪3万的程序员都避开了哪些坑
程序员薪水有高有低,有的人一个月可能拿30K.50K,有的人可能只有2K.3K.同样有五年工作经验的程序员,可能一个人每月拿20K,一个拿5K.是什么因素导致了这种差异?我特意总结了容易导致薪水低的九 ...
- 程序员段子:世界上最大的同性交友平台github
程序员(又名程序猿)因为总是冲锋在网络的最前端,还有程序猿的各种特殊性,大家在茶余饭后都有很多关于程序员的段子流传.大多都是程序员自黑的,先说在前面,程序猿还是很好的!下面看看你有没有中枪的那一条呢? ...
随机推荐
- python项目实践一:即时标记
转自:http://www.code123.cc/1317.html 这是<python基础教程>后面的实践,照着写写,一方面是来熟悉python的代码方式,另一方面是练习使用python ...
- CSS3 结构伪类选择器 详解
1 CSS3 结构伪类选择器 1.E:root 匹配E元素所在的根元素 即:html 2. E:nth-child(n) (1)匹配E元素的父元素中第n个子元素,(2)且该位置的子元素类型必须是E类型 ...
- dg
package excel; import java.util.Scanner; public class doExcel { public static void main(String args[ ...
- LeetCode OJ 114. Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...
- websocket实例(显示文件导入处理进度)
大批量数据导入时,需要即时显示对文件的处理进度.考虑ajax轮询太浪费资源,使用websocket实现. 项目使用Spring MVC(3.1),与websocket结合要求版本4.0以上.所以没有使 ...
- C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件
一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下 ...
- Python之Scrapy爬虫框架安装及简单使用
题记:早已听闻python爬虫框架的大名.近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享.有表述不当之处,望大神们斧正. 一.初窥Scrapy Scrapy是一个为了爬取网站数据,提 ...
- jquery 清空 iframe 的内容,,iframe自适应高度
$(iframe).contents().find("body").html(""); iframe自适应高度 $("#AllDescription& ...
- Android 遮罩层效果
(用别人的代码进行分析) 不知道在开发中有没有经常使用到这种效果,所谓的遮罩层就是给一张图片不是我们想要的形状,这个时候我们就可以使用遮罩效果把这个图片变成我们想要的形状,一般使用最多就是圆形的效果, ...
- php 中遍历数组时使用引用出现的问题
今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('i ...