04 2012 档案

摘要:更新内核到最新,用patch的时候一直报错,最后发现原来ubuntu用的好似dash,表示很尴尬改成bash后就可以了http://blog.sina.com.cn/s/blog_63484d2d0100mdfn.html 阅读全文
posted @ 2012-04-27 14:47 yarpee 编辑
摘要:注意memcpy 读src的长度,写src的长度http://hi.baidu.com/yelangdefendou/blog/item/d5ddcfeb9e08982ab80e2d8b.html 阅读全文
posted @ 2012-04-26 16:55 yarpee 编辑
摘要:http://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.htmlhttp://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html#Heap-Consistency-Checkinghttp://stackoverflow.com/questions/262439/create-a-wrapper-function-for-malloc-and-free-in-chttp://stackoverflow.com/questi 阅读全文
posted @ 2012-04-25 18:39 yarpee 编辑
摘要:argument_index$是一个十进制整数,用于表明要格式化第几个参数。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。#include <stdio.h>int main(){int a = 0x123,b = 0x456,d = 0x888;printf("%2\$x",a,b,d);}moonflow@moonflow-ThinkPad-Edge:~/apuetrans$ ./format 456这个特性在格式化串漏洞中可以方便的访问到需要的内存数据把0x08064d55处的字符串读出来$& 阅读全文
posted @ 2012-04-25 09:37 yarpee 编辑
摘要:http://blog.csdn.net/kittyjie/article/details/4386742http://blog.csdn.net/szkbsgy/article/details/6420113http://www.cnblogs.com/YOUEN/archive/2012/02/02/2336115.htmlhttp://blog.csdn.net/njzhiyuan/article/details/4369588http://blog.csdn.net/xufei96/article/details/5984647 阅读全文
posted @ 2012-04-24 18:52 yarpee 编辑
摘要:1.KMP算法的核心思想是利用已经得到的部分匹配信息来进行后面的匹配过程KMP算法,即Knuth-Morris-Pratt算法,是一种典型的基于前缀的搜索的字符串匹配算法。(1)next[0]= -1 意义:任何串的第一个字符的模式值规定为-1。(2)next[j]= -1 意义:模式串T中下标为j的字符,如果与首字符相同,且j的前面的1—k个字符与开头的1—k个字符不等(或者相等但T[k]==T[j])(1≤k<j)。如:T=”abCabCad” 则 next[6]=-1,因T[3]=T[6](3)next[j]=k 意义:模式串T中下标为j的字符,如果j的前面k个字符与开头的k个字符 阅读全文
posted @ 2012-04-24 16:46 yarpee 编辑
摘要:extern int errno在支持多线程的环境中,多个线程共享进程地址空间,每个线程都有属于它自己的局部errno以避免一个线程干扰另一个线程。Linux支持多线程存取errno,将其定义为:extern int *__errno_location(void);#define errno (*__errno_location())char *strerror(int errnum) //将errnum映射为一个出错信息字符串void perror(const char *msg) 阅读全文
posted @ 2012-04-22 22:07 yarpee 编辑
摘要:printf中的缺陷:#include <stdio.h>main(){ int a = 44,b = 77; printf("a=%d,b=%d\n",a,b); printf("a=%d,b=%d\n");}则会去读栈上存在的数据1.用printf读取内存数据#include <stdio.h>int main(int argc,char **argv){ printf(argv[1]);}可以利用格式化串漏洞读内存2.用printf向内存写数据如果能够配合上修改内存数据,就有可能引起进程劫持和shellcode植入了在格式化 阅读全文
posted @ 2012-04-22 15:28 yarpee 编辑
摘要:#define _ALERT 0#define _CRIT 1#define _ERR 2#define _WARNING 3#define _NOTICE 4#define _INFO 5#define _DEBUG 6#define DP_ALERT_TEXT "ALERT:"#define DP_CRIT_TEXT "CRITICAL:"#define DP_ERR_TEXT "ERROR:"#define DP_WARNING_TEXT "WARNING:"#define DP_NOTICE_TEXT &q 阅读全文
posted @ 2012-04-21 19:12 yarpee 编辑
摘要:如果程序比较长,我们有时记不住pn3所指的内存是否已经被释放,在继续使用pn3之前,通常会用语句if (pn3!= NULL)进行防错处理。很遗憾,此时if 语句起不到防错作用,因为即便pn3不是NULL 指针,它也不指向合法的内存块。因此,建议在delete释放了内存之后,应立即将指针赋值为NULL,防止产生“野指针”。 char *p = (char *) malloc(100); strcpy(p, “hello”); free(p); // p 所指的内存被释放,但是p所指的地址仍然不变 … if(p != NULL) // 没... 阅读全文
posted @ 2012-04-21 17:24 yarpee 编辑
摘要:编写代码时应当注意避免滥用系统调用减少fread与read系统调用的次数#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <sys/mman.h>void main(){ int fd = open("test.file",o); struct stat statbuf; char *start; char buf[2] = {0}; in 阅读全文
posted @ 2012-04-21 17:10 yarpee 编辑
摘要:2.6的内核的系统调用的入口在那里,内核里说是0x80,可实际的机器呢?当你在一个比较新的linux系统下使用ldd命令时,你会经常看到一个比较奇怪的文件名,即linux-gate.so.1:ldd /bin/shlinux-gate.so.1 => (0xffffe000)libdl.so.2 => /lib/libdl.so.2 (0xb7fb2000)libc.so.6 => /lib/libc.so.6 (0xb7e7c000)/lib/ld-linux.so.2 (0xb7fba000)它到底是什么文件呢?仅仅是一个动态载入库(dynamically loaded 阅读全文
posted @ 2012-04-21 16:57 yarpee 编辑
摘要:dup和dup2函数#include <unistd.h>int dup(int filedes);int dup2(int filedes,int filedes2); //两函数的返回值:若成功则返回新的文件描述符,若出错则返回-1由dup返回的新文件描述符一定是当前可用文件描述符中的最小数值。用dup2则可以用filedes2参数指定新描述符的数值。如果filedes2已经打开,则先将其关闭。如果filedes等于filedes2,则dup2返回filedes2,则不关闭它。一、重定向问题:下面是一个例子程序:#define TESTSTR "Hello dup2\ 阅读全文
posted @ 2012-04-21 16:56 yarpee 编辑
摘要:帮老丁调试他的xfa程序,这个程序有段错误。用gdb调试,bt查看堆栈信息的时候可以比较明确地定位到几个函数去,但是懒得去一步步查看。想起strace来跟踪一下系统调用。strace -f -o generateallxfa.strace ./generateallxfa -ruleno 1 -rulefile ./experiment/ftp-refined.re1) processing regex:: <.*[sS][iI][tT][eE]#.*[cC][hH][mM][oO][dD]> <set_only_bit>[root@localhost XFA]# ca 阅读全文
posted @ 2012-04-21 16:55 yarpee 编辑
摘要:在做风行软件的协议分析,在整个软件的协议分析过程中,了解到了fsp文件就是种子文件,其结构就是普通的BT种子结构(.torrent),也了解到了目前设备上规则的阻断主要是采用阻断请求ls3.fspcdn.com下载fsp种子这个过程。 来nsfocus后分析了好多p2p软件,例如QVOD,还有目前的风行,bittorrent等等,在这里饶有兴趣的想开发一个BT下载软件(linux版,并且可能会进行win版开发)。自己将在这边不断地补充BT的日志,最终完成这个软件版本。后期将有自己对这些软件的逆向分析文章。达到对P2P软件分析的一个比较深入的了解。首先是BT种子解析: BT种子文件使用了一种叫b 阅读全文
posted @ 2012-04-21 16:51 yarpee 编辑
摘要::"=&r"(val):"r"(1),"r"(lock):"&" : Means that this operand is an earlyclobber operand, which is modified before the instruction is finished using the input operands. Therefore, this operand may not lie in a register that is used as an input operand or 阅读全文
posted @ 2012-04-21 16:24 yarpee 编辑
摘要:1.一个采用补码的系统,负数的范围比正数的范围大1。举例如下, 8位带符号数的取值范围是[-2^7, 2^7 – 1]. 如果n=-2^7,那么-n = ?因此,为了防止出现负值转换为正值时出现的溢出,应该不将负值转换为正值。 因此,将所有正数转换为负数。同时,增加了一个printneg函数。这个函数打印负数。2. 负数求余的结果是正,还是负?举例如下, -5 % 10 = -5可以,只要-5 / 10 = 0就行。 -5 % 10 = 5也可以,只要-5 / 10 = -1 就行。 不同的芯片得出的结果也是不一样的。 因此,为了保证在任何芯片上求余结果相同,增加了一段处理代码。null指针并 阅读全文
posted @ 2012-04-20 17:45 yarpee 编辑
摘要:pid=fork()fork()内会用一段嵌入式汇编进行系统调用:int 0x80(具体代码可参见内核版本0.11的unistd.h文件的133行_syscall0函数)。这时进入内核根据此前写入eax的系统调用功能号 便会运行sys_fork系统调用。接着,sys_fork中首先会调用C函数find_empty_process产生一个新的进程,然后会调用copy_process将父进程的内容复制给子进程,但是子进程tss中的eax值赋值为0(这也是为什么子进程中返回0的原因),当赋值完成 后,copy_process会返回新进程(该子进程)的pid,这个值会被保存到eax中。这时子进程就产生 阅读全文
posted @ 2012-04-20 11:30 yarpee 编辑
摘要:#define assert(e) if (!e) assert_error(__FILE__,__LINE__)#define assert(e) \ ((void)((e)||_assert_error(__FILE__,__LINE__)))#define T1 struct foo *typedef struct foo *T2在类型定义的时候,正确的使用typedef可以更加通用一些3)宏不是一个语句,而是一个表达式。如下例子,#define assert(e) if(!(e)) _assert_error(__FILE__, __LINE__)如果程序员使用宏的方法如下,If (x 阅读全文
posted @ 2012-04-18 14:04 yarpee 编辑
摘要:c11的特性,用一个宏来巧妙实现#define AlignOf(type_) (offsetof(struct { char c; type_ t; }, t))http://wangcong.org/blog/archives/1924http://wangcong.org/blog/archives/category/%E7%BC%96%E7%A8%8Bhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3093.htmlhttp://imcc.blogbus.com/logs/144093548.html 阅读全文
posted @ 2012-04-18 13:28 yarpee 编辑
摘要:看C陷阱,一些细节要注意,可能平常你想当然就写了,但是要是换成另一种情况,你一伙可能发现不了为什么#include <stdio.h>main(){ char c; while((c = getchar())!=EOF) putchar(c);}http://baike.baidu.com/view/751665.htmgetchar()返回是int,所以如果像上述用char c来的话,会出现截断,从而造成一些错误 阅读全文
posted @ 2012-04-15 20:30 yarpee 编辑
摘要:>>> re.findall("a(b)?", "ab")['b']>>> re.findall("ab?", "ab")['ab']>>> re.findall('a(?:b)?', 'ab')['ab'](?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模 阅读全文
posted @ 2012-04-13 10:49 yarpee 编辑
摘要:4月的书单计划:1.C++反汇编揭秘看完并完全理解2.复习数据结构(看大话数据结构)3.复习APUE,并深入理解掌握4.复习C缺陷5.大致阅读unix编程艺术,体会思想关注细节,掌控细节,思考为什么这样实际阅读pycurl,liburl,curl源码开始python版爬虫工具的编写1.按照knowsec的要求编写2.对于下载类增加断点续传,断点下载,支持IPv6特性 阅读全文
posted @ 2012-04-12 11:12 yarpee 编辑
摘要:参考链接:http://blog.csdn.net/li_yang98/article/details/5871663 阅读全文
posted @ 2012-04-11 19:51 yarpee 编辑
摘要:http://www.itmaybeahack.com/homepage/iblog/architecture/C551260341/E20081031204203/index.htmlhttp://stackoverflow.com/questions/383738/104-connection-reset-by-peer-socket-error-or-when-does-closing-a-socket-resuhttp://stackoverflow.com/questions/441374/why-am-i-seeing-connection-reset-by-peer-error 阅读全文
posted @ 2012-04-09 20:28 yarpee 编辑
摘要:DHE,就是加密协议连接,是BT协议的术语。用于防范BT协议过滤。一般正规BT软件都会自动选择协议加密。一般来说比特精灵一般使用DHE-XOR方 式加密,比特彗星一般使用DHE-RC4方式加密,这两个软件的协议加密都可以互相连接。如果把协议加密设置为强制,可以防止一些吸血软件如迅雷等的连 接,保证P2P网络的稳定。并且可以大幅度提升内网的下载速度。在使用BitComet时经常可以见到客户端版本号后多了一个*DHE*或*DHEv2*这就是协议加密的表示。现在多为DHEv2。DHEv2顾名思义,就是第二代加密协议连接DHEv2并不是由网络决定的,而是由软件决定作为加密协议,很多BT软件上还可以看到 阅读全文
posted @ 2012-04-07 16:19 yarpee 编辑
摘要:http://blog.csdn.net/cumirror/article/details/5071234http://blog.csdn.net/keyouan2008/article/details/5843388http://wenku.baidu.com/view/3f3d8cf4f61fb7360b4c65f9.htmlhttp://baike.baidu.com/view/22002.htmhttp://mr0811.blog.51cto.com/804916/3648501.IP分片产生的原因是网络层的MTU;TCP分段产生原因是MSS.2.IP分片由网络层完成,也在网络层进行重 阅读全文
posted @ 2012-04-06 15:48 yarpee 编辑
摘要:def Bin2Hex(hash): hexchars = [] for i in struct.unpack('%dB' % (len(hash),), hash): hexchars.append('%02x' % (i,)) return ''.join(hexchars)python的struct.unpack('50s')解析定长为50的二进制buff,但这个50是我计算并存储在一个变量中怎么办str_bytes_num = 50st = struct.unpack('%ds' % str_bytes_n 阅读全文
posted @ 2012-04-06 10:40 yarpee 编辑
摘要:This is something I end up having to google for every now and then.I have a list of numbers:tmp = [1,2,3,4,5]that I want to, in PHP talk is implode(), in python you can use the string.join() method like:','.join( tmp )But it says: TypeError: sequence item 0: expected string, int found, becau 阅读全文
posted @ 2012-04-05 15:48 yarpee 编辑