liwugang - page 4

Git自动化合并多个Commit

当我们有多个commit或者从开源处拿到多个commit时,想合成一个commit,并保留每个commit的message时,大家都知道用”git rebase -i”可以解决,但这种方式需要手动进行操作,假如我们要处理的比较多,就想要自动化来处理,下面介绍下怎么自动化处理。 git rebase逻辑 当我们”git rebase -i”后,git在当前.git/rebase-merge目录下生成git-rebase-todo文件,然后调用git editor来让用户编辑git-rebase-todo文件进行处理,如果实现自动化就需要: 修改git editor来使用我们提供的; 脚本来处理进行git-rebase-todo文件的处理。 git editor的修改 ...

Read more

openssl AES密钥和iv长度问题分析

在做filecrypt项目时花费时间最多的是AES256算法的调试上,出现的问题是: 调用完加密函数然后直接调用解密函数,这样是可以正确解密的,但是调用完加密函数后将密文保存在文件后,然后重新使用程序进行解密却是无法正常解密,本文分析下该问题的原因。 例子 int aes_encrypt_common(uint8_t *input, uint64_t length, const unsigned char *password, const unsigned char *iv, uint8_t *out, uint64_t *out_length); int aes_decrypt_common(uint8_t *input, uint64_t length, co...

Read more

找茬游戏辅助工具

近在整理硬盘时,看到了几年前写的 美女找茬工具,一时兴起看下现在是否能用,试了下,完全用不了了,界面和以前的界面一样啊,图片的偏移应该没有变,按道理应该能用,猜想可能是图片做了处理。就花了点时间看了下,果然发现了问题,现在和大家分享下。

Read more

error:Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it … 解决方案

python通过pip或者源码来安装某些模块时,这些模块包含有c/c++源码,安装过程会调用本地的编译器编译这些代码。在Windows平台下我安装时候的错误消息是“error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27” 可以看出错误是由于没有找到该vc版本,对应的是vs2008,当然一种解决方法是安装该版本,但我已经安装了vs2015,所以我就需要修改下默认的这种配置。

Read more

3-Longest Substring Without Repeating Characters @LeetCode

题目 题目中得到的信息有 一段字符串找出不重复子串的最大长度,只需要长度信息。 思路 肯定是需要将字符串遍历一遍,在遍历过程中就需要查找前面字符串是否出现该字符,因此这是该算法的重点。若没找到,长度加一,若找到了,长度会从前面该字符位置+1处开始算起。下面以图来说明: 假如我们以begin为子串的开始,current表示当前处理的位置。1)当前位置的字符没有出现在[begin,current)的区间内,说明将该值加入到区间内满足没有重复条件,长度加一; 2)若当前值已经在该区间内,加入后肯定会出现重复,则应该将begin移动到没有该值的最左边位置,图中 new begin位置满足该条件。 在移动begin之前首先需要判断[begin, current)是否是现有的最大长...

Read more

1-Two Sum @LeetCode

题目 思路 题目中得到的信息有 都是整数,并且可正可负,也可一个值包含多个; 只有一个正确的结果。 方法一 最直接的思路就是两重循环遍历,时间复杂度是O(n^2),这样肯定不行。 方法二 由于是乱序的,1)可以先排序,2)然后再遍历一遍就可以找到结果。排序的话不能再原来的基础上进行,这样就破坏了下标顺序,因此需要申请额外的空间,用于保存他们的索引,然后再该空间上进行排序。时间复杂度是[排序O(logn) + 查找O(n)],空间复杂度是O(n)。 /** * Note: The returned array must be malloced, assume caller calls free(). */ int* twoSum(int* nums, in...

Read more

2-Add Two Numbers @LeetCode

题目 思路 题目中得到的信息有 这是两个非负数,每位分别保存在链表的一个结点上; 逆序保存,从低位到高位依次。 一般整数的相加都是从低往高进行,和保存的顺序一致,因此一次遍历就可完成,可以看出这道题目不难。 C算法 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { struct ListNode *ret, *p, ...

Read more

LEB128相关知识

介绍 LEB128(little endian base 128)是一种变长的整数压缩编码形式,它是出自于DWARF debug file format。在Android的Dalvik Executable format中使用该编码用于表示32位整数。由于32位整数占用固定的4个字节,可能大多数整数并不需要4个字节,最高几个字节可能为0(正数)或者为1(负数),该编码就是不保存最高位的这些字节。 原理 LEB128的表现形式都是一样的,如下面表格所示,由于是little endian,因此是从低字节到高字节。每个字节中的最高bit是标识信息,1表示还有后续字节,0表示结束,后面7bits是有效数据。将多个字节的该7bits从低到高组合起来就是所表示的整数。 LEB128分成有符号数...

Read more

类似py2exe软件真的能保护python源码吗

背景 最近写了个工具用于对项目中C/C++文件的字符串常量进行自动化加密处理,用python写的,工具效果不错,所以打算在公司内部推广。为了防止代码泄露就考虑不采用直接给源码方式,而python二进制脚本pyc和pyo,虽然提供的不是源码,但可以通过uncompyle2直接得到源码。通过网上资料发现有Windows下的py2exe、Mac下的py2app和跨平台的PyInstaller工具都可以将python脚本打包成可执行文件,第一反应应该满足需要,但有些不放心,故亲自尝试和分析了这些工具。

Read more