摘要: 大多数时候,我们研究的是如何阅读源代码。但在一些情况下,比如源代码不公开或得到源代码的代价很高的情况下,我们又不得不需要了解程序的行为,这 时阅读二进制文件就非常重要。假设现在有一个二进制可执行文件,我们木有源代码,但要了解它的实现,这里仅简单列出一些常用的工具。 阅读方式可分为两个方面:静态阅读和动态阅读。 静态阅读 首先,file命令可以查看可执行文件的大体信息。比如是哪种格式的,哪个体系结构的,有没有调试信息等。这些决定了需要用哪个版本的工具进行进一 步查看。比如如果是arm体系的可执行文件就可用arm toolchain里的工具,如arm-eabi-objdump,arm-eab... 阅读全文
posted @ 2012-08-27 23:10 Mr.Rico 阅读(1965) 评论(0) 推荐(0) 编辑
摘要: C语言中重要函数的简要分析及实例1. strspn与strcspn2. strtok与strpbrk3. strstr, strchr与strrchr4. 字符串与数值之间的转换:atoi,atol,atof,strtod,strtol,strtoul5. frexp和ldexp1. strspn与strcspn(1)函数strspn:size_t strspn ( const char * str1, const char * str2 );功 能: 在串中查找指定字符集的子集的第一次出现,如果str1中的所有字符都在str2中出现过,那么返回str1的长度。如果第一个字符就不在str2中, 阅读全文
posted @ 2012-08-27 15:42 Mr.Rico 阅读(478) 评论(0) 推荐(0) 编辑
摘要: ——本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题:是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值为0;2) 在主线称中起动线程1,打印"this is thread1",并将g_Flag设置为13) 在主线称中启动线程2,打印"this is thread2",并将g_Flag设置为24 阅读全文
posted @ 2012-08-27 10:22 Mr.Rico 阅读(222) 评论(0) 推荐(0) 编辑
摘要: "一切皆Socket!"话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型 有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?3、socket的基本操作3.1、socket()函数3.2、bind 阅读全文
posted @ 2012-08-27 10:06 Mr.Rico 阅读(292) 评论(0) 推荐(0) 编辑
摘要: "该死系统存在内存泄漏问题",项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统 长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导 致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。如果程序运行时间足够长,如后台进程运行在 服务器上,只要服务器不宕机就一直运行,一个小小的失误也会对程序造成重大的影响,如造成某些关键服务失败。对于内存泄漏,本人深有体会!实习的时候,公司一个项目中就存在内存泄漏问题,项目的代码两非常大,后台进程 阅读全文
posted @ 2012-08-27 09:47 Mr.Rico 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 为什么需要知道C/C++的内存布局和在哪可以可以找到想要的数据?知道内存布局对调试程序非常有帮助,可以知道程序执行时,到底做了什么,有助于写出干净的代码。本文的主要内容如下:源文件转换为可执行文件可执行程序组成及内存布局数据存储类别一个实例总结源文件转换为可执行文件源文件经过以下几步生成可执行文件:1、预处理(preprocessor):对#include、#define、#ifdef/#endif、#ifndef/#endif等进行处理 2、编译(compiler):将源码编译为汇编代码 3、汇编(assembler):将汇编代码汇编为目标代码 4、链接(linker):将目标代码链接为可执 阅读全文
posted @ 2012-08-27 09:29 Mr.Rico 阅读(577) 评论(0) 推荐(0) 编辑