自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 java bean代码生成器(只需要提供一个url和最外部的类名即可)

写了一个java bean代码生成器,只需要一个url和类名即可

2014-11-22 16:08:36 1404

原创 栈溢出攻击提权进入root shell

以前对栈溢出攻击只是一种感官上的,最近学了shellcode,决ding

2014-11-11 08:32:01 4362 2

原创 接下来的学习计划

我是个技术痴,同时也是个技术贪

2014-11-03 14:39:07 1240

翻译 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

转载 汇编版--LinkedList

2014-01-24 15:53:01 726

原创 关于堆栈对齐对性能的影响

堆栈对齐后,到底对一个程序的性能影响多大,貌似不太好衡量,因为CPU对于相似内容有一个高速缓存的处理,也就是对同一块内容,第二次访存往往会比第一次高效得多,这里,就粗略地用一个demo衡量下堆栈对齐或者是CPU高速缓存下面的这个demo用了两个结构体:Employee和EmployeeBad。Employee对Word和doubleWord都进行了对齐,EmployeeBad没有做任何处理。请

2014-01-23 14:39:15 2331

原创 汇编版-BinarySearch

2014-01-22 13:39:31 738

原创 汇编版,冒泡排序法

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

搜索引擎信息检索实践

搜索引擎,信息搜索实践,搜索引擎,信息搜索实践,搜索引擎,信息搜索实践

2019-01-29

ARM System Developers Guide-Designing and Optimizing System Software.pdf

ARM System Developer’s Guide Designing and Optimizing System Software

2015-05-27

UNIX环境高级编程头文件和库文件

将apue.h整理,并从书中摘录了一部分apue.c的源代码。 最后连接成库文件libapue.so.提供run.rb脚本文件。如此,ruby run.rb test.c并可运行并连接libapue.so文件,编译连接运行。 并且,您还可以加在vimrc中加一个map,如:nmap \s :!ruby run.rb %<CR>,这样,每次敲完书上的代码,只要按\s,并自动编译当前源文件,链接libapue.so库文件,然后运行生成的可执行程序。

2013-10-17

android json解析代码生成器

通过编写配置文件,该代码生成器能自动生成相应的bean,和解析json的代码。 你需要做的是,有一个ruby环境,将配置文件写在test.conf中,然后shell的重定向即可。 如生成Bean文件: ruby BeanGen.rb > Bean.java 生成json解析代码: ruby json_parser.rb > JSONParser.java 不使用重定向,模式是打印在终端中。

2013-07-29

Thinking in Java 练习题答案

Thinking in Java 4Edition 练习题答案

2011-12-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除