- 博客(77)
- 资源 (7)
- 收藏
- 关注
原创 android arm64硬件实现加速crc32算法
在android arm64平台下,crc32,aes等常用算法有指令集实现。故在android下,可借助这些指令实现代码加速。如何判断自己的手机是否支持crc32呢? 有三个方法: 方法1,直接查看/proc/cpuinfo方法2,使用ELF辅助向量 APIunsigned long hwcap = getauxval(AT_HW
2017-08-12 11:39:52 3855
原创 c++11 producer and customer design
#include #include #include #include #include #include #include std::mutex mut;std::mutex ful;std::queue data_queue;std::condition_variable data_cond;std::condition_variable data_full;std:
2017-04-29 09:52:28 956
原创 x86 x64, thumb, arm CPU simple inline-hook framework
单线程x86,x64 inline-hook框架:https://github.com/liuyx/inline-hook
2017-03-26 21:20:03 1879
原创 如果获取库函数的临时变量?
inline-hook的本质是加跳转指令,在x86下实现比较简单,一般用push $addr; ret即可这条指定的含义是: 将指定的地址压栈,然后返回到该地址,从而实现hook然后在指定函数内的hook,需要维持堆栈平衡,因为假设hooked之后想要跳回函数执行,但当前的上下文已经改变,这时候若跳回去,可能会引发crash这里假设有下面这样的代码:#include "te
2016-12-26 13:11:53 601
原创 android将线程绑定在指定CPU
linux下可以直接调用pthread_setaffinity_np,将当前线程绑定在具体的cpu上,而android该API被屏蔽了,需要调用sched这个系统API,详情见下面代码:package nativelibs;public class Affinity { static { System.loadLibrary("Affinity"); }
2016-12-26 12:51:14 13692 1
原创 ptrace之SMC,反调试
#include #include #include #include #include #include #include #define PAGE_START(p) ((p) &~4095)#define PAGE_END(p) ((p) + PAGE_START(p))static char encrypt_shellcode[] = "\x66\xba\xd6\x6
2016-11-09 22:40:53 940
原创 android当参数可变时,如何调用可变参数库函数
假设有一个库函数的原型如下:int add(int,...);而调用add方法之前,我们必须知道具体的参数,比如add(1,1), add(2,1,2)等等,可是,当不知道具体参数的个数时,该如何调用该方法呢?我们知道add方法属于传统的cdcel调用约定,也就是说要由调用者恢复堆栈平衡,而add方法是不可能属于stdcel的,故要实现此方法调用,必须要能够调度指令。也就是说
2016-06-20 13:27:58 2905
原创 double2int快速解法
#include #define MAGIC 6755399441055744.0#define MAGIC_DELTA 0.49999999999999static inline int double2int(double d) { unsigned int s = (*(long long*)&d) >> 63; // 0 or -1 0: -delta -1:
2016-04-23 21:42:42 1534
原创 一个简单的有限状态机例子
public class Test { public static void main(String[] args) { final long money = 600000L; final int preMoney = (int)money; final int loanYears = 30; final int everyMonthMoney = 2000; final
2016-03-06 15:06:10 4043
原创 让写代码变成简单的copy操作,代码生成器之一---------android,findViewById
通过写一个简单的配置文件,自动扩展生成相应的代码,从而可以偷点小懒。配置文件如下:TextView:moneyTextView:nameTextView:ageImageView:headImgruby 代码生成器如下:require 'erb'class FindViewById class << self def get_type_ab(type)
2014-12-01 20:14:33 2599
翻译 Fedora 14 Error: Cannot retrieve repository metadata (repomd.xml) for repository
网上找了很多解决方法都不能解决,后来在国外的一个问答网站找到解决
2014-10-17 11:53:17 7925 1
翻译 更安全的signal handling————使用Reentrant Function
什么时候用,怎么用,才能让你的代码保持bug freeDipak Jha (dipakjha@in.ibm.com)Software EngineerIBM20 Janua
2014-05-15 19:29:33 2076
原创 使用FPU Control Word寄存器控制计算整形与浮点型混合相加的结果以及对浮点数异常相关位Mask的处理
FPU 特殊作用寄存器中有一个控制寄存器,该寄存器的作用是控制浮点数计算结果的四舍五入以及对相关异常的静默处理Control word寄存器含有16位,可以将其内容保存在一个WORD 大小的内存变量中。我们来看看它的内容是什么样的第几位 描述0 无效操作异常掩码1
2014-02-18 15:54:55 1893
原创 C++普通线性查找与使用汇编优化的时间对比
通过编写简单的for循环线性查找某一个元素,计算出前后的时间差,然后写一个同样功能的汇编版本,计算出时间差,我们看看两者在执行一百万次所执行的时间差头文件:extern "C" { bool AsmFindArray(long n, long array[], long count); bool FindArray(long n, long array[], long count);
2014-01-30 19:45:14 1120
转载 C++嵌套汇编------ 加密文件
#include #include using namespace std;void TranslateBuffer (char *buf, unsigned count, unsigned char eChar);int main(int argc, char * argv[]){ // Read input and output files from the command
2014-01-28 11:08:33 992
原创 关于堆栈对齐对性能的影响
堆栈对齐后,到底对一个程序的性能影响多大,貌似不太好衡量,因为CPU对于相似内容有一个高速缓存的处理,也就是对同一块内容,第二次访存往往会比第一次高效得多,这里,就粗略地用一个demo衡量下堆栈对齐或者是CPU高速缓存下面的这个demo用了两个结构体:Employee和EmployeeBad。Employee对Word和doubleWord都进行了对齐,EmployeeBad没有做任何处理。请
2014-01-23 14:39:15 2331
原创 汇编版,冒泡排序法
TITLE sample of bubble sort for asmebly languageINCLUDE Irvine32.inc.dataarray DWORD 3,1,7,5,2,9,4,3arraySize = ($ - array) / TYPE DWORDbefore BYTE "before calling bubble sort, the array is: ",0
2014-01-22 11:04:45 5141
原创 JXTA理论篇
Peers之间的路由消息 Router Peers作为代理连接防火墙或NAT分隔的两个Peer。在防火墙保护下的peer周期连接Router peer以查看是否有新的消息。注意:在防火墙保护下的peer必须使用能穿透防火墙或NAT的协议(防火墙根据端口号过滤协议,一般不会过滤HTTP协议)。一旦消息从source peer发到destination peer,连接就关闭。接下来的消息可以重复
2013-12-19 12:00:42 872
原创 JXTA开篇
细想自己前前后后看了不少书,博客也写的零零散散。然后某天突然想查看某个知识点的时候,不是到网上到处搜,就是绞尽脑汁狂回忆,感觉煞费心思,何不如好好经营下博客,一来可以让学习的东西深刻记录脑中,二来可以待方面将来查询,亦可作为网上朋友有相似困惑之用,何乐不为。最后,经营博客觉得还有一个好处,可以提醒自己坚持一件事不要半途而废,骚年,努力吧~!
2013-12-19 10:54:18 740
原创 Vim的operator model
Operator + Motion = ActionVim默认的Operation Model触发命令有:Trigger Effectc Changed Deletey Yank into registerg~ Swap c
2013-11-13 22:18:59 1166
原创 重新开始学习apue
最近半年其实学习挺乱的,一阵子学习linux,一阵子学习ruby,rails,最近还折腾了考研。哎~!太乱了。经过深思熟虑,觉得还是不能考研,毕竟经济状况不允许,算了,还是好好折腾我的技术吧。考虑良久,觉得自己学习太过散,应该选一个方面一直深入下去。感觉自己还算喜欢linux和ruby,那么,从今天开始,深入学习他们。apue第三次学习了,奈何前两次都没看完
2013-10-17 15:29:32 1468
原创 ruby的class << self, 及其class_eval和instance_eval的区别
昨天在看web敏捷开发之道的时候看到class 关于class 定义singleton_methods有三种方式第一种: 直接给对象打开定义这是最简单相信也是见得最多的一种方式:a = Array.newdef a.size "Hello World!"end输入puts a.size ====>输出"Hello,World
2013-08-20 00:42:46 10189
原创 JavaBean基于Builder,通用JSON解析,代码生成器
# 一个类包含:类名,属性列表和内部类指针 class Clazz def initialize(cls_name) @cls_name = cls_name @attrs=[] @lead_cls_names=nil #前面有几个前导类名 @list_attrs = []end def cls_name @cls_name end attr_accessor :at
2013-07-29 01:20:46 1637
原创 JavaBean任意层次代码生成器——基于Builder设计模式
昨天写了一个只能解析一个层次的的代码生成器,今天对代码做了优化,能对任意层次的JavaBean进行解析首先,需要写配置文件注意,配置文件的要领是:假如是一个类名的话,需要在前面加关键字Cls,如果是某个类的内部类,需要依次在最外部的类用"-"连起来,如: Person-Des-Lib测试配置文件如下:Cls:PersonString:nameint:ag
2013-07-23 02:22:44 2260 1
原创 ruby 版,JavaBean的另一种优雅写法——Builder的代码生成器
template="public class "attr_types =[]attr_names = []index=0File.open("Test.txt"){ |f| file_name=nil file_obj=nil cls_name=nil attr_name=nil f.each_line do |line| line="#{line}".gsub("\n"
2013-07-22 00:36:58 1305
原创 C语言数据结构学习之数组线性表
#ifndef _SEQLIST_H#define _SEQLIST_H#define LIST_INIT_SIZE 2#define LIST_INCREMENT 1typedef int ElemType;typedef struct{ ElemType *elem; int length; int listsize; }SeqList;void addSeq
2013-06-15 13:04:08 1198
翻译 OpenGL 矩阵变换(讲的太好了~!)
Overview几何数据——顶点位置,和标准向量(normal vectors),在OpenGL 管道raterization 处理过程之前可通过顶点操作(Vertex Operation)和基本组合操作改变这些数据。Object Coordinates对象的本地坐标系——任何变换之前的最初位置.为了变换(transformation)这些对象,可以调用glRotate(),g
2013-04-12 15:39:59 123792 21
原创 自定义——无穷递归解析json工具
package net.liuyx.test;import java.util.HashMap;import java.util.Iterator;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;/** * 该工具将json的层次以url的形式组合成key,然后
2013-03-15 10:59:37 6448
原创 vim处理文本文件
vim默认提供了很多处理plain text的操作,虽然不及word这些专门的文本处理工具,但是功能也很强大的说。vim默认不会自动折行,也就是说当一行很长的时候,虽然表面上看起来vim把它断成好几行,但实际上并没有添加换行操作符,除非显式按回车键。而命令:set textwidth = [num] 将一行显示为指定字符长度,超过这个长度vim会自动加上换行操作符,而不用用户的担
2013-01-31 11:39:40 1956 1
原创 Vim Improved笔记之Commands For Programmers
为当前编辑的文件设置文件类型一般情况下,vim根据后缀名猜测文件类型,但是在有些场合下,我们可能会自己写一个和平常不同的后缀名,这个时候应该告诉vim该文件的文件类型。比如:set filetype=c 将当前编辑的文件定义为c文件。这样,即使当前文件后缀名为 .inc文件,vim还是把它当做c源文件,用c的语法高亮显示当然,也可以查看对某一种文件类型的文档::help
2013-01-29 17:59:07 1175
原创 vim基本可视模式
Visual模式v 与V的区别。v从当前字符开始选,以后每次选中一行,但第一次选择的是从当前字符开始的行。而V从当前行开始选择,直到光标结束之处。块选择Ctrl+v 在表格中删除指定列非常有用查看Visual Mode下的命令 :help v_Visual模式下的操作d 与D的区别d只删除选中的字符,而D删除选中字符所在行的所有字符,c和C,y和Y同理
2013-01-29 16:25:30 2189
原创 vim多文件操作及Window
Marksvim可以设置书签,这样在文件内到处跳转后,可以跳转回来。比如在你想要跳回来的某一行按下ma,(可以按m[a-z]即26种选择)然后跳转到别处时,再次按下`a,就会跳转回到你指定的行数.当然,mark比较有用的场合在于删除多行。比如你想删除指定区间的行数,而你又不想记住这两行的行数,即可在删除区间的第一行按下ma,记录下mark a,然后将光标移到删除的最后一行,再次按下
2013-01-29 15:17:07 1058 1
原创 vim基本操作
使用默认的example配置文件 :r $RUNTIME/vimrc_example.vimvim查看以某个字母开头的命令列表: 字母 例如,查看e开头的命令集合: e 表示按CTRL 和字母D同时按有时候编辑问个文件的时候突然忘了编辑文件的名称,这个时候可以按下Ctrl+G就可显示当前编辑的状态将屏幕上滑和下滑半屏,使用按键Ctrl+U, Ctrl
2013-01-29 12:26:21 1298 1
原创 坚持学习vim之开篇
前端时间学习了很长时间vim,一直没有成就,那会儿看的是学习vi和vim编辑器,看到map那张就放了。今天无意中看到vimturor觉得真心不错,或许这是一个好的资料坚持把它啃下来,我英语又不差!
2013-01-29 10:12:09 563
原创 计算工程中总共有多少行代码
use strict;use File::Find;print "input your dir here: \n"; chomp(my $dir = );print "counting,please waiting...\n"; find(\&wanted,$dir);my $line_count;sub wanted{ if(-f $_){ my $file = $_;
2013-01-04 10:36:30 888
ARM System Developers Guide-Designing and Optimizing System Software.pdf
2015-05-27
UNIX环境高级编程头文件和库文件
2013-10-17
android json解析代码生成器
2013-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人