程序员自我修养
文章平均质量分 72
快乐的霖霖
一个人默默的奋斗者
展开
-
线程安全与Singleton
线程安全与Singleton 线程安全是个非常棘手的问题。即使你合理的使用了锁(lock),依然可能不会产生预期的效果。让我们来看看貌似合理的代码X=0;Thread 1 Thread2lock(); lock();x++; x++;unlock(); unlock();原创 2012-12-29 22:09:41 · 922 阅读 · 0 评论 -
asmlinkage宏
asmlinkage宏asmlinkage是个宏,使用它是为了保持参数在stack中。看一下/usr/include/asm/linkage.h里面的定义:#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))其中 __attribute__是关键字,是gcc的C语言扩展。__att原创 2013-01-07 16:12:21 · 872 阅读 · 0 评论 -
fread函数解析
fread函数解析1、size_t fread(void *buffer,size_t elementsize,size_t count,FILE *stream)return fread_s(buffer,SIZE_MAX,elementsize,count,stream). //可以看出所有工作都交给了fread_s.2、size_t _cdecl原创 2013-01-07 15:25:27 · 5418 阅读 · 0 评论 -
关于gcc、glibc和binutils的关系
关于gcc、glibc和binutils的关系关于gcc、glibc和binutils模块之间的关系,以及在现有系统上升级glibcgcc、glibc和binutils模块之间的关系1) gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.s原创 2013-01-07 09:06:11 · 1651 阅读 · 0 评论 -
windows API
windows API一个普通的fwrite()的调用路径: Windows API现在的数量很庞大,按照功能被划分为几大类: 参考:《程序员的自我修养》原创 2013-01-07 18:09:53 · 831 阅读 · 0 评论 -
关于GCC的__attribute__ ((constructor))
关于GCC的__attribute__ ((constructor)) gcc为函数提供了几种类型的属性,其中包含:构造函数(constructors)和析构函数(destructors)。程序员应当使用类似下面的方式来指定这些属性: static void start(void) __attribute__ ((constructor));原创 2013-01-07 11:03:35 · 2389 阅读 · 0 评论 -
程序真的是从main开始的吗?
程序真的是从main开始的吗?程序从main开始的吗?在执行main之前全局变量已经初始化,main函数的两个参数也被正确传了进来,堆和栈的初始化也已经完成,一些系统I/O也被初始化。完成上面这些工作的函数称为入口函数(Entry Point)。一个典型的运行步骤大致如下:·操作系统在创建进程后,把控制权交到了程序的入口,这个入口往往是运行库中的某个函数原创 2013-01-06 20:38:13 · 1782 阅读 · 0 评论 -
延迟加载Dll的实现原理
延迟加载Dll的实现原理一. 简介延迟加载Dll是一个混合方式,它通过LoadLirary和GetProcAddress获得延迟加载函数的地址,然后直接转向对延迟加载函数的调用。延迟加载不是操作系统的一个特征,它完全是通过链接器和运行库加入额外的代码和数据来实现的。同样地,无法在WINNT.H里找到关于延迟加载的更多参考,不过,可以在延迟装入数据(Delayload Dat原创 2013-01-06 00:03:07 · 2185 阅读 · 0 评论 -
DLL HELL解析
DLL HELL解析DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序。作为一名面向对象的程序员,希望DLL可以导出类,以便在类的层次上实现复用。所幸的是,DLL确实也可以导出类。 然而事实却没这么简单,导出类的DLL在维护和修改时有很多地方必需很小心,增加成员变量、修改导出类的基类等操原创 2013-01-06 16:17:52 · 764 阅读 · 0 评论 -
GCC的-fomit-frame-pointer编译选项的含义
GCC的-fomit-frame-pointer编译选项的含义优化你的软件时,发觉"-fomit-frame-pointer"这个选项还是蛮有用的。GCC手册上面这么说:Don't keep the frame pointer in a register for functions that don't need one. This avoids the instr原创 2013-01-03 21:55:24 · 5133 阅读 · 0 评论 -
linux下ldconfig命令详解
linux下ldconfig命令详解 为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig.此执行程序存放在/sbin目录下. ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态原创 2013-01-03 19:44:51 · 3529 阅读 · 2 评论 -
全局偏移表(GOT)和过程链接表(PLT)
全局偏移表(GOT)和过程链接表(PLT)ELF 格式的共享库使用 PIC 技术使代码和数据的引用与地址无关,程序可以被加载到地址空间的任意位置。PIC 在代码中的跳转和分支指令不使用绝对地址。PIC 在 ELF 可执行映像的数据段中建立一个存放所有全局变量指针的全局偏移量表 GOT对于模块外部引用的全局变量和全局函数,用 GOT 表的表项内容作为地址来间接寻址;对原创 2013-01-03 13:27:09 · 4642 阅读 · 0 评论 -
readelf命令
readelf命令readelf用来显示ELF格式目标文件的信息.可通过参数选项来控制显示哪些特定信息。(注意: readelf不支持显示archive文档, 也不支持64位的ELF文件)。使用方法1:查看共享库的依赖库(NEEDED)和搜索名(SONAME)。readelf -d原创 2012-12-30 22:29:07 · 1689 阅读 · 0 评论 -
警惕UNIX下的LD_PRELOAD环境变量
警惕UNIX下的LD_PRELOAD环境变量前言: 也许这个话题并不新鲜,因为LD_PRELOAD所产生的问题由来已久。不过,在这里,我还是想讨论一下这个环境变量。因为这个环境变量所带来的安全问题非常严重,值得所有的Unix下的程序员的注意。 在开始讲述为什么要当心LD_PRELOAD环境变量之前,请让我先说明一下程序的链接。所谓链接,也就是说编译器找转载 2013-01-03 20:52:43 · 901 阅读 · 0 评论 -
动态链接时进程堆栈信息
动态链接时进程堆栈信息进程初始化时,堆栈里除了保存了进程执行环境和命令行参数等信息,除此外,还有动态链接器所需要的辅助信息数组,结构定义在elf.h中typedef struct{ uint32_t a_type; union { uint32_t a_val; } a_un;}Elf32_原创 2013-01-03 14:46:08 · 1335 阅读 · 0 评论 -
详解大端模式和小端模式
详解大端模式和小端模式一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,原创 2012-12-31 10:55:02 · 987 阅读 · 0 评论 -
Singleton模式中的DoubleCheck机制
Singleton模式中的DoubleCheck机制 在多线程环境下,使用Singleton模式很重要的一点就是要保证用Double Check机制保证线程安全。 很多时候, 我们通常需要使用singleton模式来保证对象实例的唯一性。通常我们是这么写的: class Singleton { private: static原创 2012-12-29 22:12:58 · 1446 阅读 · 0 评论 -
CreateThread()和_beginthread()有什么不同?
CreateThread()和_beginthread()有什么不同? 我们知道在Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来创建线程;另外一种就是调用MSVC CRT的函数_beginthread()或_beginthreadex()来创建线程。相应的退出线程也有两个函数Windows API的原创 2013-01-07 10:17:43 · 2269 阅读 · 0 评论