- 博客(42)
- 资源 (2)
- 收藏
- 关注
原创 [Android] smalidea 无源码调试 apk
前言公司最近把指纹打卡改为钉钉打卡,作为有自驱力的程序员,每天打卡简直就是在浪费我的生命,所以黑掉钉钉的考勤打卡功能,期间用到smalidea这个神器,相比ida简单许多,记录下怎么玩(文章末尾有彩蛋~)。关于smalideasmalidea官网: https://github.com/JesusFreke/smali/wiki/smalidea 它其实就是 IntelliJ IDEA/Andro
2016-11-10 13:26:08
4477
原创 [温故而知新] 《Linux/Unix系统编程手册》——文件I/O
本文对文件IO这一块做一些梳理,记录思考的一些问题和一些待解决的问题,后续会继续更新。 I hear and I forget,I see and I remember,I do and I understand.Part 1 :通用IO/**相关头文件:<fcntl.h><unistd.h>文件IO的几个系统调用fd = open(pathname, flags, mode)
2016-10-23 19:41:13
1724
原创 [温故而知新] 关于C++的引用
好久没写博,平时都是把笔记写在有道云笔记里,最近国庆,克服懒癌来写写。距离上次写博,都快半年了,以后要勤快点了。话说霹雳布袋戏又要出新剧集了。进入正题,写这篇文章的原因之前看过几本C++的书,只记得C++的引用只是个所谓的“别名”,但是总感觉这东西很奇怪,当时也没具体去深究它,最近在看一本金山的一个哥们写的《深入应用C++ 11》,里面在聊到右值引用的时候,对引用有一句描述: 无论声明左值引用还
2016-10-05 20:56:46
518
原创 [温故而知新] 《深度探索c++对象模型》——站在对象模型的尖端
前言终于到最后一章啦,准备迎接新的篇章,刚好“霹雳布袋戏”要出新的剧集了,期待ing。这章也是一些零散的知识点。1. 模版的名称决议直接上代码://scope of the template definitionextern double foo(double);template < class type >class ScopeRules{public: void invariant
2016-04-13 22:55:40
601
原创 [温故而知新] 《深度探索c++对象模型》——运行期语意
这张东西有点少,就写6条…1. copy assignment operator在虚拟继承情况下行为不佳,有可能多次调用,比如说在一个菱形结构中。2. 数组的定义,每个数组里的元素的构造和析构也跟之前的一样需要进行。数组里的元素按默认构造进行初始化。3. new操作符int *pi = new int(5);//分两步进行int *pi;if( pi = __new(sizeof(int)) )
2016-04-12 00:47:40
437
原创 [温故而知新] 《深度探索c++对象模型》——构造、析构、拷贝的语义
前言base class 的virtual或者 pure virtual 虚析构函数需要实现C的pure virtual function 可以有body两种初始化方式的效率比较虚拟继承下virtual base class 的构造在构造函数中调用虚函数赋值操作符前言好久没写博,已经好几个月花在为公司的项目填坑上,最近稍微能抽出点时间来写啦。这一章的知识点相对零散,书也翻译得乱七八糟的。
2016-04-11 01:08:21
652
原创 [温故而知新] 《深度探索c++对象模型》——对象方法成员
本节的复杂点,在于对virtual function的支持上。一、先从简单的几种function入手1.non member function 2.static member function 3.non static member function第一种是最常见的 non member funcion://在一个地方定义returnValue functionName(argumentLis
2015-11-28 21:38:03
576
原创 [温故而知新] 《深度探索c++对象模型》——对象数据成员的内存布局
前言侯捷把书中第三章翻译为 “Data语意学”,另外书中有些语句得读几遍才明白他什么意思,也许是不习惯台湾的一些语言习惯。本文做一些简单的梳理。了解对象数据成员的布局前,先了解一个语法相关的点:对member functions 的函数体的分析,会直到整个class的声明都出现了才开始,而对于 member functions 的参数列表 却是在第一次遭遇时适当地决议(resolved)。 1
2015-11-14 19:45:18
610
原创 [Android UI] 波浪特效的实现
本文目标是实现一个可自定义的波浪特效。先看效果:相关知识点: canvas绘图、BitmapShader、PorterDuff.Mode.SRC_ATOP。思路: 1.准备两张图,一张为图案,一张为波浪的形状。 2.先绘制图案。 3.绘制波浪。这里有两个关键点,一个是设置画笔的BitmapShader为波浪底图,另一个是绘制的时候,使用图形混合模式PorterDuff.Mode.SRC_AT
2015-11-07 19:09:19
2711
3
原创 [温故而知新] 《深度探索c++对象模型》——构造函数
前言: 由于平时工作时候大部分时间写Java,虽然之前画了不少时间学习C++,很长时间不写,回头要写,又发现很多东西又手生了,这里做个总结备忘,顺便把C++的一些东西和java比较。c++相对于c,编译器干了好多事,而理解c++关键的点,就是理解么编译器帮我们做了什么事,以及为什么做这些事。1.默认构造函数 default constructor 首先理解什么是默认构造函数? 我目前的理解,设
2015-11-04 21:54:44
570
原创 [Android UI] graphics
本文对Android graphics API 做些整理。一、颜色 Color类颜色由一个int型表示,共四个字节。从高位到低位四个字节分别为透明度、红色、绿色、蓝色。 相关API:1.给定颜色获取相关属性int alpha(int color)//返回给定颜色的透明度值,也就是高位第一个字节。 int red(int color) //返回给定颜色的红色色值int green(int
2015-10-14 15:51:03
1004
1
原创 Java JNI实现原理初探
前言 写这个是出于好奇。 我们知道cpu只认得 "0101101" 类似这种符号, C、C++ 这些代码最终都得通过编译、汇编成二进制代码,cpu才能识别。而Java比C、C++又多了一层虚拟机,过程也复杂许多。Java代码经过编译成class文件、虚拟机装载等步骤最终在虚拟机中执行。class文件里面就是一个结构复杂的表,而最终告诉虚拟机怎么执行的就靠里面的字节码说明。 Ja
2015-09-12 17:31:19
25931
15
原创 操作系统实践(9)——进程、多进程、系统调用、进程调度
这一章,与前面提到的特权级转移以及中断处理机制相关的知识关系很大。首先画个图了解下这几个概念的关系以及相互作用:以前一直很想知道系统调用是怎么实现的,看完书才明白系统调用跟普通的中断处理程序实现基本是相似的,可见中断处理程序是本章重点中的重点。梳理一下书中的思路: 1.首先实现一个简单的进程,注册一个时钟中断处理程序,在进程执行的过程中发生时钟中断,执行中断处理程序,返回进程被中断的地方继续执行。
2015-09-01 22:42:49
2035
原创 操作系统实践(8)——从Loader到内核
到目前为止,我们写的代码都是用汇编写的,汇编的缺点就是,第一遍写完了,回头再过来看,又忘了,晦涩难懂。其实我感觉,写汇编的好处,就是能让自己去多了解一下cpu还有其它硬件的结构。硬件的的架构,决定软件的实现方式,硬件就好比基因,软件就是一个个的动物个体。本次实践涵盖的内容包括《orange’s一个操作系统的实现》书中的第三章末尾、第四章、第五章。因为这些东西比较紧凑。捋一下思路: 1. 中断与异
2015-08-26 11:22:04
1394
2
原创 操作系统实践(7)——分页机制
为什么分页,分页有什么好处从苦逼码农的角度,用一个租房的例子来说,原来分段机制,就好比房子整租,当租客不想租的时候,就整个房子退还给房东,房东再找其它人整租,这样有个缺点,在北京,整租一套房子,很贵,而且很多租客都是一个人或者两个人,用不着租那么大,于是一方面房东如果找不到租客,房子就空闲着,一方面要是租客咬咬牙租下整套房子,很多房间也是很浪费。于是,下面要讨论的分页机制,就是现在市场上各种单间出租
2015-08-12 19:00:20
1292
原创 操作系统实践(6)——特权级转移
关于CPL、DPL、RPL这几个概念刚开始是有点难理解的,因为各种情况都有,有点复杂。我觉得最简单的办法就是,把程序的各种段,理解为国家的各种政府机构,例如省级机构、市级机构、县级机构等,DPL就是用来标识这个的,这是个静态的概念,省级的机构办省级的事,市级的机构办市级的事,设置好了各自的职权范围。而执行程序,可以理解为去这些机构办事,CPL就是你当前的身份。而RPL呢,可以理解为,你去办事的时候,
2015-07-07 16:17:10
653
原创 操作系统实践(5)——关于LDT
LDT与GDT类似,为局部描述符表。使用LDT有几个步骤: 1.在GDT中加一个表项,并增加一个描述符,假设为SelectorLDT; 2.像配置GDT表那样,配置好LDT表自己的描述符,并设置好相应的ldt的选择子,选择子有一位标识是ldt还是gdt; 3.加载LDT,使用lldt指令; 4.直接jmp ldt里面的选择子。跳转到LDT里的代码段,跟用GDT跳转代码段一样,都是通过 j
2015-06-01 23:10:44
1330
原创 操作系统实践(4)——从保护模式返回实模式
好吧,一开始我觉得从保护模式应该就是设置一下cr0然后jmp一下就回到实模式了,这个没必要去实践。不过看到书中里面有些代码觉得有些冗余,然后里面有段话也是没看明白,动手实践才恍然大悟。于渊在书中写这个例子的思路大概是这样的: 1. 从实模式中跳转进入保护模式。(参考前面几篇) 2. 在保护模式下,访问一个地址偏大点的(实模式寻址范围之外)内存块进行读写,验证一下保护模式寻址范围是不是比实模式寻
2015-05-08 16:38:51
1707
原创 操作系统实践(3)——火箭助推器
本次实践的目的:打破开机引导程序512字节的限制,并从实模式切换到保护模式。 我们知道,bios开机自检、找到启动设备后,把启动设备的第一个扇区加载内存0x7c00位置开始执行。前两次实践中,我们的引导程序小于512字节,这没造成什么问题。如果我们的引导程序超过512字节怎么办呢?我的第一个想法就是,利用加载到内存的这512字节,写个程序,把启动盘中真正的引导程序继续加载到内存中。看到《Ora
2015-04-26 23:24:33
957
原创 操作系统实践(2)——工欲善其事,必先利其器
环境搭建1. 安装bochssudo apt-get install vgabios bochs bochs-x bximagesudo apt-get install build-essential libx11-dev libxrandr-dev libgtk2.0-dev上bochs官网下载源码包,这里下载的是bochs 2.6.7版。tar zxvf bochs-2.6.7.tar.gz
2015-04-24 19:06:03
989
原创 操作系统实践(1)——从引导开始
第一段引导代码boot.asm org 07c00h mov ax,cs mov ds,ax mov es,ax call DispStr jmp $DispStr: mov ax,BootMessage mov bp,ax mov cx,16
2015-04-24 15:18:24
708
原创 红黑树源码实现
继上一篇《思考红黑树》 自己亲自动手把红黑树实现一遍,发现理论成功了要转换为实际代码还是有点难度的,困难点主要在于一些边界点的确定。还是需要进一步提高自己的C功力。直接贴代码吧,有需要的拿去用,我自己也留着以后拿来玩玩。这份代码肯定是需要根据实际环境进行修改的,前两天大概扫了一下 《Linux内核中的红黑树》里面的代码,发现自己写的代码水平跟大神写的还是有些差距啊...加油吧。
2013-08-24 12:22:50
1158
原创 思考红黑树
前言 网上讲红黑树的文章比较多,参考 维基百科--红黑树 《教你彻底理解红黑树》 等等。大概扫了扫,在讲红黑树的插入和删除操作的时候,主要集中精力在讲插入和删除的各种复杂情况,然后再画几个图出来,作者就以为讲得很清楚很牛逼了。其实我觉得,讲得非常烂,算法最重要的是它背后的思想,或者说它背后一些规律。前面提到的两篇文章都在讲“这个算法是什么”,但是“这个算法为什么是这样”压根就没
2013-08-22 21:00:53
2502
原创 计算两路径的相对路径
需求:给定绝对路径A和绝对路径B,计算B相对于A的路径,例如A=/srv/test/ , B=/srv/foo/bar ,则结果为 ../foo/bar 。思路:把A和B中具有相同的前面部分全部去掉,A中剩下的部分,有几个目录就替换为几个 ../ ,再把结果拼上 B的剩余部分就是结果。从PHP手册看到有人写的一个函数:<?php function relativePath($f
2013-08-06 13:09:51
974
1
原创 新浪mid与id互转
前言: 工作需要,顺带研究下,参考资料 新浪微博地址url字符与mid的相互转换算法及原理 由于原文代码看起来有点挫,所以决定把他代码拿过来改改,自己写一个。 新浪微博链接格式为:http://weibo.com/用户id/mid?其它参数,例如 http://weibo.com/1646512101/A3m18DfFN?mod=weibotime 而新浪的api
2013-08-05 19:17:25
1221
原创 反汇编之函数调用
首先提出2个问题:1.函数调用时,参数是怎样传递的?2.函数调用时,函数内部的局部变量和函数的参数在栈中是如何布局的?参考资料:1.AT&T与Intel汇编语言的比较2.C++反汇编代码分析–函数调用3.栈溢出4.常见寄存器名称及其作用目前得出的结论:1.从函数A中调用函数B之前,如果参数少的话(少于cpu一些可用的通用寄存器个数)则会把参数放到寄存器里
2013-08-01 21:26:00
2123
原创 字母大小写转换
好久没写博了,准备继续搞起。今天先写个简单的,字母的大小写转换。问题1:给定一个字符串“asDFghj”,把它全部转为大写字母或者小写字母。这问题是不是太简单了点,现有的各种函数库里面都有什么strtoupper()、strtolower()之类的转换函数。自己手写一个呢?这让我想起以前上机实验写C程序的时候做过这个题。好吧,先写下当时我是怎么做的: void s
2013-07-19 15:04:05
1067
原创 迷宫求解
前言最近复习一下数据结构,发现一个有趣的迷宫求解问题,当时就没去做,现在来玩玩这个问题。迷宫问题的简单描述:给定一个迷宫,给定一个起点和终点,找到从起点到终点的一条可行路径。《数据结构(C语言版)》书中的图如下:解决思路:1.把上面的迷宫转换为一个二维矩阵,用0表示空白,1表示障碍。2.从起点开始,用逐步探测的方法寻找路径 从当前的位置开始探测,按顺时针
2013-06-08 19:37:43
1294
原创 PHP源码分析之HashTable
目录 1.前言 2.HashTable的总体结构及思路 2.1 哈希表的相关数据结构 2.2 哈希表的总体结构图 2.3 哈希表元素的析构 3.HashTable的相关API及算法 1.前言 看过PHP源码的童鞋都知道,源码里面除了zval这个最常用的结构外,另外一个就是HashTable啦。在《
2013-05-20 16:41:51
2267
2
原创 PHP源码分析之启动过程
文章还没远远没写完,因为发现整个启动过程涉及太多东西了,慢慢写~慢慢更新...------------------------------------------------------------------------------------------------------------------------ PHP可以以多种方式运行,例如作为apache一个模块mod_
2013-04-28 18:55:27
2048
原创 PHP源码分析之线程安全模型
欢迎转载,转载请注明出处http://blog.csdn.net/hackooo/article/details/8702156 谢谢!新浪微博:小灰马 0.前言 相信很多人跟我一样,一开始看PHP源码的时候看到一堆的TSRM_CC,TSRM_DC特别蛋疼,大多数函数的声明都会在参数末尾加个TSRM_DC,着实让像我这样以前没搞过多线程编程的很不理解。网上找了找,介绍
2013-04-27 16:25:08
3018
1
原创 简单的多线程流水线模型(二)
续上一篇《简单的多线程流水线模型(一)》下面我们创建三个工人 Lucy,Lily,Lilei,他们干的活就是接收输入的秒数input,把睡眠input秒,然后把input-1丢给下一个工人。这里做一下小结:流水线模型的优缺点。优点:一环扣一环,确保事情按顺序一个一个干完。缺点:流水线的某个环节如果处理速度慢的话,会影响上游的整个流水线,所以流水线的瓶颈应该是花时间最多的那个环节
2013-04-12 19:21:23
1787
原创 简单的多线程流水线模型(一)
流水线这个概念应该比较好理解,如一个工厂里,有一堆原料 --> 工人1加工 --> 工人2加工 --> 工人3加工 --> ... ->形成最终的产品。下面写个简单的流水线实现的模型。以工人2为例分析工人的整个工作过程:循环开始: a.等待工人1的输入,要是工人1没输入,工人2就趴在工作台上睡觉。 b.工人1有输出给工人2,发现工人2此时在睡觉呢,空闲着呢,因此工
2013-04-12 18:17:21
4121
2
原创 简单的key-value实现
今天写个shell脚本,需要存一些小数据,用数据库明显是太不必要了,那就写在文件里吧,为了方便存取,写了个简单的 key-value 实现, 支持增删改查就行啦。需要的拿去用~ #!/bin/sh # @author:hackooo@sina.cn # Notice special chars inside key like / will replace with _ eg. abc/d
2013-03-29 15:37:26
1301
原创 PHP源码分析之内存管理
欢迎转载,转载请注明出处http://blog.csdn.net/hackooo/article/details/8702156 谢谢!新浪微博:小灰马主要内容1.源码阅读2.动态内存分配之边界标识法3.PHP内存管理浅析1.源码阅读http://lxr.php.netcscopecscope 是一个 C 语言的浏览工具,通过这个工具可以很方便地
2013-03-21 17:46:53
2318
8
原创 Yii源码分析——yii整个工作流程
下面是我根据yii源码画的yii工作流,这里只涉及一些基本的组件,其它组件是在使用时用到,没在这个工作流中体现出来。这图是用微软的viso画的,点击下载vsd原图靠,坑爹的csdn,传张图片竟然显示不出来!还得自己手动搞个外链的,这博客有点垃圾!算了, 用360云盘搞个外链吧。
2012-11-09 14:38:25
1270
原创 Yii源码分析——collections
framework/collections包 主要包含一些常用的数据结构,有CTypeListCTypeMapCAttributeCollectionCConfigurationCListCMapCQueueCStackCListIteratorCMapIteratorCQueueIteratorCStackIterator1.CList 1.CList 把数组(数
2012-09-22 00:19:59
1207
原创 Yii源码分析——CComponent
CComponent用到许多php的魔术方法。下面摘自php手册的一些魔术方法的说明。属性重载void__set (string $name , mixed$value )mixed__get (string $name )bool __isset ( string$name )void__unset (string $name )在给未定义的变量赋值时,__set() 会
2012-07-27 21:47:26
1913
原创 《JavaScript高级程序设计(第2版)》读书笔记
1. 元素属性:charset,defer,src,type.用script标签链入外部javascript文件时,浏览器不会检查文件的扩展名,所以这个扩展名不是必须的,使用服务器端语言生成javascript代码成为可能。script的src属性还可以包含来自外部域的javascript文件。如果一个页面有多个script标签,浏览器会挨个挨个解析执行。2.把javascript文件在hea
2012-02-20 19:43:49
774
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人