- 博客(44)
- 资源 (6)
- 收藏
- 关注
原创 C#访问网页、保存网页
很喜欢看经典书籍,所以就想把网络上的书籍下载下来,做成kindle的电子书籍,以便于阅读。查了一些网络资料,实现了自己的想法,下面这段代码,是从国学导航网站(http://www.guoxue123.com)把《北史》的全部内部保存到本地的“C:\temp\北史”文件夹里。using System;using System.Collections.Generic;using Sys
2015-10-03 15:02:18 4620
原创 快速排序与折半查找算法函数:qsort与bsearch
qsort用来排序,bsearch用二分法来查找元素void qsort( void *base, size_t num, size_t width,int (__cdecl *compare)(const void *elem1, const void *elem2 ) );base: 要排序的数组num: 数组中的元素数目width: 每个数组元素占用内存空间,可使用sizeo
2013-04-21 11:41:38 1843
原创 intel X86指令格式分析
先说一下寄存器编号0 1 2 3 4 5 6 7EAX ECX EDX EBX ESP EBP ESI EDIintel指令格式如下图所示:Mod为00、01和10时,R/M=000(eax)时,有效地址分别是[eax]、disp8[ea
2013-04-12 19:00:15 4037
原创 李陵之殇
李陵置酒贺武曰:“今足下还归,扬名于匈奴,功显于汉室,虽古竹帛所载,丹青所画,何以过子卿!陵虽驽怯,令汉贳陵罪,全其老母,使得奋大辱之积志,庶几乎曹柯之盟,此陵宿昔之所不忘也。收族陵家,为世大戮,陵尚复何顾乎!已矣,令子卿知吾心耳!”陵泣下数行,因与武决。霍光、上官桀与李陵素善,遣陵故人陇西任立政等三人俱至匈奴招之。陵曰:“归易耳,丈夫不能再辱!”遂死于匈奴。《资治通鉴 卷23》 惜哉
2013-02-21 21:37:38 1218
原创 英雄与流氓
刘邦固然好酒及色,甚至为了自己安危抛妻弃子,可就凭这些小节将一个杰出的政治家称为流氓,自身会是什么水平?出色的政治家与道德完人,不要一厢情愿把他们联系起来,吴起、商鞅杰出吧,你能凭他们做的一些在道德上站不住脚的事将其归入流氓一类?伯夷、尾生,道德水准高吧,这样的人对社会有什么贡献?他们能使社会安定?能让老百姓幸福?司马迁在《史记》中描述刘邦“仁而爱人,喜施,意豁如也。常有大度,不事家人生产作业
2013-01-30 20:18:32 1014
原创 见小曰明
昔者纣为象箸而箕子怖。以为象箸必不加于土铏 ,必将犀玉之杯 。象箸玉杯必不羹菽藿,则必旄象豹胎。旄象豹胎必不衣短褐而食于茅屋之下,则锦衣九重,广室高台。吾畏其卒,故怖 其始。居五年,纣为肉圃,设炮烙,登糟邱,临酒池,纣遂以亡。故箕子见象箸以知 天下之祸,故曰:‘见小曰明。’ 《韩非子 喻老》 梁琛 (慕容)暐使其黄门侍郎梁琛聘于坚。琛还,言于评曰:“秦扬兵讲武,运
2012-11-23 07:59:08 1338
原创 吾岂匏瓜?
佛肸召,子欲往。子路曰:“昔者由也闻诸夫子曰:‘亲於其身为不善者,君子不入也。’佛肸以中牟畔,子之往也,如之何?”子曰:“然,有是言也。不曰坚乎?磨而不磷。不曰白乎?涅而不缁。吾岂匏瓜也哉?焉能系而不食!”(《论语阳货》) 《史记孔子世家》“佛肸为中牟宰,赵简子攻范中行,伐中牟,佛肸畔,使人召孔子。” 《四书章句集注》“佛肸,晋大夫赵氏之中牟宰也。子路恐佛肸之浼夫子,故问此以止夫子
2012-11-11 18:47:43 1840
原创 Eclipse CDT生成、调用C动态库
(一) 生成动态库1 创建动态库工程File->New->Project->CProject->选择Shared Library,工程命名为test。 2 创建源代码文件File->New->Source File,指定名称为test.c,内容:#includeusing namespacestd;void show(){ cout } 编
2012-11-09 18:55:08 6021
原创 Windows下安装Eclipse CDT
1、JRE的安装Eclipse是一款跨平台的工具,只需要基本的java虚拟机就可以运行。2 下载Eclipse CDT到http://www.eclipse.org下载,选择自己想要的版本,不用安装,解压后可直接运行。3、安装MinGW到MinGW的网站www.mingw.org 下载(实际上下载的是个在线安装程序,真正安装MinGW是在线完成的)。安装后,要配置系统环境变
2012-11-07 21:17:24 743
原创 ptsname() -- 获得从伪终端名(slave pseudo-terminal)
伪终端并不是真正的硬件终端设备,而是一个应用程序。打开一个终端,输入tty 这个命令来查看当前所使用的终端名:zhang@zhang-laptop:~$ tty/dev/pts/1后面的1意味着已经打开了1个终端窗口。实际上,像上面的 /dev/pts/1是从伪终端,它通过文件 /dev/ptmx 建立。/dev/ptmx 可以建立主从伪终端,当打开该文件时,返回的是主伪终端的文件
2012-11-03 17:09:03 7841
原创 ubuntu 10.04/Windows上编译qemu 1.2
在ubuntu 10.04上,qemu 1.2的编译过程如下:1) ./configure --target-list=arm-softmmu --prefix=/usr出现下面提示:Error: zlib check failedMake sure to have the zlib libs and headers installed.安装zlib./config
2012-10-30 19:13:25 3075
原创 处无为 行不言
天下皆知美之为美,斯恶已。皆知善之为善,斯不善已。故有无相生,难易相成,长短相较,高下相倾,音声相和,前后相随。是以圣人处无为之事,行不言之教;万物作焉而不辞,生而不有,为而不恃,功成而弗居。夫唯弗居,是以弗去。所有人都喜欢美,讨厌恶,肯定善,否定不善。喜怒同根,是非同门,过于追求美善,可能有失偏颇。就像老子讲的,有了“无易短下声后”,才有了“有难长高音前“,它们即对立,又统一,没有非
2012-10-29 22:36:39 663
原创 伐柯伐柯,其则不远
这句话是说: 你用斧子去砍树做斧柄,不用去另找图纸或样子,手里拿的斧柄就是啊!范蠡曰:会稽之事,天以越赐吴,吴不取。今以吴赐越,越其可逆天乎?且夫君王早朝宴罢,非为吴邪?谋之二十二年,一旦而弃之,可乎?且乎天与弗取,反受其咎。伐柯者其则不远,君忘会稽之危乎?勾践曰:吾欲听子言,吾不忍其使者。 《史记越王勾践世家》刘宣等固谏曰:“晋为无道,奴隶御我,是以
2012-10-28 19:30:11 2001
原创 天道有知
邓攸 《晋书 良吏传》 攸七岁丧父,寻丧母及祖母,居丧九年,以孝致称。清和平简,贞正寡欲。少孤,与弟同居。永嘉末,没于石勒。石勒过泗水,攸乃斫坏车,以牛马负妻子而逃。又遇贼,掠其牛马,步走,担其兒及其弟子绥。度不能两全,乃谓其妻曰:“吾弟早亡,唯有一息,理不可绝,止应自弃我兒耳。幸而得存,我后当有子。”妻泣而从之,乃弃之。
2012-10-14 10:00:17 1108
原创 守柔曰强
句践入宦于吴,身执干戈为吴王洗马,故能杀夫差于姑苏。文王见詈于王门,颜色不变,而武王擒纣于牧野。故曰: ‘守柔曰强。’年在天,位在人颜含 人尝论少正卯、盗跖其恶孰深。或曰:“正卯虽奸,不至剖人弃膳,盗跖为甚。”含曰:“为恶彰露,人思加戮;隐伏之奸,非圣不诛。由此言之,少正为甚。”众咸服焉。郭璞尝遇含,欲为之筮。含曰:“年在天,位在人,修己而天不与者,命也;守
2012-10-14 09:57:40 3205
原创 人情之隐
【原文】 王敦既死,王含欲投王舒。其子应在侧,劝含投彬。含曰:“大将军平素与彬云何,汝欲归之?”应曰:“此乃所以宜投也。江州[彬]当人强盛,能立异同, 此非常识所及。睹衰危,必兴慈愍。荆州[舒]守文,岂能意外行事耶?”含不从,径投舒,舒果沉含父子于江。彬初闻应来,为密具船以待,待不至,深以为恨。[冯述评] 好凌弱者必附强,能折强者必扶弱。应嗣逆敦,本非佳儿,但此论深彻世情
2012-09-17 20:03:35 2053
原创 伯仁由我
【原文·出处】 初,敦之举兵也,刘隗劝帝尽除诸王,司空导率群从诣阙请罪,值顗将入,导呼顗谓曰:“伯仁,以百口累卿!”顗直入不顾。既见帝,言导忠诚,申救甚至,帝纳 其言。顗喜饮酒,致醉而出。导犹在门,又呼顗。顗不与言,顾左右曰:“今年杀诸贼奴,取金印如斗大系肘。”既出,又上表明导,言甚切至。导不知救己,而甚衔之。敦既得志,问导曰:“周顗、戴若思南北之望,当登三司,无所疑也。”导不答。又曰:“
2012-09-14 22:01:33 1981
原创 Eclipse CDT配置使用glib库的方法(ubuntu10.04/windows)
1 安装Eclipse IDE for C/C++ Developers以及glib2 新建一个C project3 右击工程,属性->C/C++ General -> Path and Symbols,在includes中添加/usr/include/glib-2.0和/usr/include/glib-2.0/include(glib安装的位置可能不同);4 C/C++ Build
2012-09-05 21:26:49 2789
原创 Windows同步机制总结
临界区在所有同步对象中,临界区是最容易使用的,但它不是内核对象,只能用于同步单个进程中的线程。临界区一次只允许一个线程取得对某个数据区的访问权。还有,在这些同步对象中,只有临界区不是内核对象,它不由操作系统的低级部件管理,而且不能使用句柄来操纵。由于使用时不需要从用户态切换到核心态,所以速度很快(X86系统上约为20个指令周期),非常适合于序列化对一个进程中的数据的访问,但其缺点是不能跨进
2012-08-29 09:25:30 3039
原创 ubuntu man安装
Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。Linux 的man手册共有以下几个章节:1、Standard commands (标准命令)2、System calls (系统调用)3、Libraryfunctions (库函数)4、Specialdevices (设备说明)5、File formats (文件格式)6
2012-08-24 20:01:44 3329
原创 时钟周期-机器周期-指令周期-总线周期
时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,
2012-07-31 21:50:36 935
原创 编译器对程序的优化过程
编译器的优化过程:优化过程是所谓的“NP完全问题(NP-complete problem)”复杂度理论的例子。但现代的优化程序并不尝试完全的可能,只是用启发式和案例型算法来确定机器码应采取的转换过程。最好不要使用goto语句,goto不见可能降低程序的可读性,还可能导致程序不能规约,使得编译器的优化工作很难进行。常用的优化措施有下面7种:(1) 常量折叠:即编译时计算出常量表达
2012-07-25 13:47:57 1651
原创 gcc中的逗号表达式简写
看qemu代码的时候,看到一条语句,像是逗号表达式,又跟以往见的不一样。a = b? : 1;在gcc下int b = 2;int a = 3;int main(void) { a = b? : 1;00401324: mov 0x402000,%eax00401329: mov %eax,%edx0040132b: test
2012-07-22 14:09:07 1127
原创 刘殷为相
汉主刘聪残暴施虐,向他进谏与见阎王差不多,但刘殷确是例外。下面是《资治通鉴》卷88中的原文:殷为相,不犯颜忤旨,然因事进规,补益甚多。汉主聪每与群臣议政事,殷无所是非;群臣出,殷独留,为聪敷畅条理,商榷事宜,聪未尝不从之。殷常戒子孙曰:“事君当务几谏。凡人尚不可面斥其过,况万乘乎!夫几谏之功,无异犯颜,但不彰君之过,所以为优耳。”官至侍中、太保、录尚书,赐剑履上殿、入朝不趋、乘舆入殿。然殷
2012-07-06 20:58:23 4506
原创 QEMU模块构造
QEMU模块构造#define module_init(function, type) \static void __attribute__((constructor)) do_qemu_init_ ## function(void) { \ register_module_init(funct
2012-07-04 11:21:00 2599
原创 __thread, __typeof__与逗号表达式
1 __thread修饰符约束变量的生存期只在一个线程中,线程停止时变量也被销毁。它提供了一种简单的方式来保证线程安全,多线程访问时不需要关注竞争条件。2 __typeof__操作符:指示表达式的类型,任何可以使用typedef定义名称的地方都能使用它。__typeof__(*x) y; // Declares y with the type of what x point
2012-06-09 08:40:48 1214
原创 qemu中反转比较与交换比较操作数方法
首先将各种比较操作以枚举形式定义:typedef enum { TCG_COND_EQ, TCG_COND_NE, TCG_COND_LT, TCG_COND_GE, TCG_COND_LE, TCG_COND_GT, /* unsigned */ TCG_COND_LTU, TCG_COND_GEU,
2012-05-11 11:21:12 714
原创 动态翻译代码异常时目标CPU状态恢复
动态翻译器执行时如果出现异常,可如何确定异常位置对应的目标位置呢?首先,执行语句:tb = tb_find_pc(pc);其中pc表示异常出现时宿主PC值,如果返回的tb不为NULL,则说明异常发生在动态翻译代码执行时。为了恢复目标CPU的状态,需要使用cpu_restore_state函数。它与函数cpu_gen_code类似,但两者生成中间码时调用函数分别是gen_interm
2012-05-06 16:58:26 1339
原创 softmmu同构函数的定义
在qemu的softmmu代码中,有很多函数它们的功能是相似的,只是处理的数据类型不同,这里我姑且称之为“同构”函数。如果为它们分别编写函数体,代码量及维护工作量会增加数倍,以softmmu_defs.h文件中声明的函数为例,共声明了16个函数//softmmu_defs.huint8_t REGPARM __ldb_mmu(target_ulong addr, int mmu_idx);
2012-04-24 18:44:24 3094
原创 识人五法
战国时期的李克提出了识人五法,居视其所亲,富视其所与,达视其所举,穷视其所不为,贫视其所不取。即:第一,居视其所亲。看一个人平常都与谁在一起,亲近哪些人,如与贤人亲,则可重用,若与小人为伍,就要当心;第二,富视其所与。看一个人如何支配自己的财富,如只满足自己的私欲,贪图享乐,则不能重用,如接济穷人,或培植有为之士,则可重用;第三,达视其所举。一个人处于显赫之时,就要看他如何选拔部属:若任人为贤,则
2012-04-22 16:57:59 3787
原创 Eclipse CDT Hello World工程makefile分析
1. 工程文件分析使用eclipse新建一个Hello World工程,假设工程名称是hello,此时eclipse在工程目录下新建了一个名为hello的文件夹:hello/ .cproject .project src/ hello.c先build该工程,然后Clean该工程,清除生成的目标码,这时hello文件夹下只多了eclipse
2012-04-16 19:42:59 13932 2
原创 makefile自动生成依赖关系
<!--@page {margin:2cm}p {margin-bottom:0.21cm}code.cjk {font-family:"DejaVu Sans",monospace}code.ctl {font-family:"DejaVu Sans Mono",monospace}-->手工编写依赖关系不仅工作量大而且极易出现遗漏,更新也很难
2012-04-04 20:23:33 7536
原创 ubuntu上安装eclipse CDT
1 在www.eclipse.org上下载Eclipse IDE for C/C++ Developers (includes Incubating components)2 根据安装的ubuntu确定下载linux-32或linux-64版本3 解压缩出eclipse文件夹如果ubuntu上没有安装jre或jdk1 到oracle官网下载jre2 如果是b
2012-04-01 13:02:44 1270
原创 OPERAND-SIZE和ADDRESS-SIZE属性
当处理器在保护模式下执行时,每一个代码段都具有默认的OPERAND-SIZE和ADDRESS-SIZE属性。这些属性通过segment descriptor中的D flag确定,当D flag为1时,OPERAND-SIZE和ADDRESS-SIZE为32,否则为16。当处理器在实地址模式、虚8086模式或SMM模式,默认的OPERAND-SIZE和ADDRESS-SIZE为16。当OPE
2012-03-30 19:51:10 1512
原创 win eclipse cdt安装
1、Java JDK的安装Eclipse是一款跨平台的工具,只需要基本的java虚拟机就可以运行。2 下载Eclipse CDT到http://eclipse.org/download下载,选择自己想要的版本,不用安装,解压后可直接运行。3、安装MinGW到MinGW的网站http://sourceforge.net/projects/mingw/files/上下载(实际上下载
2012-03-28 13:36:32 887
原创 regparm
GCC中可以使用__attribute__((regparm(n)))指定最多可以使用n个寄存器(eax, edx, ecx)传递参数,n的范围是0~3,超过n时则将参数压入栈中(n=0表示不用寄存器传递参数)。看下面例子,函数p1约定不使用寄存器传递参数,尽管只有1个参数,仍然将参数压入栈中。函数p2约定最多可使用3个寄存器传递参数,因为输入参数有4个,所以前三个使用寄存器传递,最后一个
2012-03-28 13:36:05 2802
原创 QEMU翻译块(TB)分析
1 翻译缓存qemu中翻译缓存是一块连续的内存单元,使用全局变量code_gen_buffer保存其首地址,缓存大小由全局变量code_gen_buffer_size指示;全局变量code_gen_ptr指示当前未使用的缓存地址。static uint8_t *code_gen_buffer;static unsigned long code_gen_buffer_size;sta
2012-03-28 13:32:05 4298
原创 QEMU分页机制分析
1 qemu页面层次划分qemu通过定义一些宏灵活地进行分页,首先由宏TARGET_PAGE_BITS(12)确定页的大小,然后根据目标机的物理地址空间和宿主机的字长确定P_L1_BITS和V_L1_BITS,从而使得剩余部分可以被L2_BITS均分。那么如何确定P_L1_BITS和V_L1_BITS的值呢?先看下面两个宏定义:/* The bits remaining after N l
2012-03-26 17:47:35 1655
原创 RAMBlock之file_ram_alloc
在linux下,分配RAMBlock时可以将内存块映射到文件中,详细内容可见file_ram_alloc函数,下面是该函数的主要部分:static void *file_ram_alloc(RAMBlock *block, ram_addr_t memory, const
2012-03-25 17:15:41 1058
Unix环境高级编程第二版源码
2012-08-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人