随笔分类 - c&c++语言
Windows/Linux下C/C++内存泄露检测工具
摘要:http://hi.baidu.com/irenbest/blog/item/6353c7fdb3d77140d7887d13.html一 Window下的内存泄露检测(以VC++环境为例)灵活自由是C语言的一大特色,但这个特色也难以避免的带来一些副作用,比如内存泄露。众所周知,内存泄露的问题比较复杂,程序正常运行时你看不出它有任何异常,但长时间运行或在特定条件下特定操作重复多次时,它才暴露出来。所以,内存泄露往往是难以发现,也难以定位解决的。Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具,用户可从http://www.codeproj
阅读全文
深度探索套接字缓冲区 sk_buff skb
摘要:http://blog.csdn.net/aaa6695798/article/details/4879271 套接字缓冲区用结构体struct sk_buff表示,它用于在网络子系统中的各层之间传递数据,处于一个核心地位,非常之重要。它包含了一组成员数据用于承载网络数据,同时,也定义了在这些数据上操作的一组函数。下面是其完整的定义: struct sk_buff { struct sk_buff *next; struct sk_buff *prev; struct sock *sk; struct skb_timeval tstamp; struct net_device *dev; s.
阅读全文
Writing Loadable Kernel Modules using netfilter hooks (in-depth HOWTO) – Part 1
摘要:http://fcns.eu/2010/02/netfilter-hooks/keyword:write new netfilter moduleNote:This article was inspired by the lack ofupdateddocumentation on how to write proper netfilter kernel modules. At the time I’m writing this article, the latest stable release was 2.6.32.8. I am also assuming you are familia
阅读全文
16.1 模板定义
摘要:16.1.1 函数模板。模板定义以关键字 template 开始。后接 模板形参表,模板形参表是用尖括号括住一个或多个形参列表,形参之间以逗号分隔。模板形参可以是表示类型的 类型形参,也可以是 表示常量表达式 的非类型形参。使用函数模板。使用函数模板时,编译器会推断哪个或哪些模板实参 绑定到模板形参。一旦编译器确定了对应的模板实参,就称为:实例化了一个函数模板实例。inline 函数模板template <typename T> inline T min(const T& ,const T&);注意:inline 说明符放在模板形参之后,函数返回类型之前。16.1.
阅读全文
15.2基类与派生类的定义
摘要:动态绑定在C++中,通过基类的引用/指针调用虚函数时,发生动态绑定。基类的引用或指针既可以指向基类的对象也可以指向派生类的对象,这一事实是动态绑定的关键。用引用或指针调用的虚函数在运行时确定,被调用的函数是引用或指针当前所指对象的实际类型所定义的。访问控制public和private标号用户代码可以访问类的public成员而不能访问private成员,private成员只能由基类的成员和友元访问。protected。protected成员可以被派生类对象访问但不能被该类型的普通用户访问。定义派生类。为了定义派生类,使用“类派生列表”指定基类。如下形式class classname: acces
阅读全文
C++中的临时对象
摘要:http://blog.chinaunix.net/space.php?uid=576762&do=blog&cuid=316503我们知道在C++的创建对象是一个费时,费空间的一个操作。有些固然是必不可少,但还有一些对象却在我们不知道的情况下被创建了。通常以下三种情况会产生临时对象: 1,以值的方式给函数传参; 2,类型转换; 3,函数需要返回一个对象时;现在我们依次看这三种情况:一,以值的方式给函数传参。 我们知道给函数传参有两种方式。1,按值传递;2,按引用传递。按值传递时,首先将需要传给函数的参数,调用拷贝构造函数创建一个副本,所有在函数里的操作都是针对这个副本的,也正
阅读全文
函数调用约定与函数名称修饰规则--VC
摘要:作者:星轨(oRbIt) E_Mail:inte2000@163.com 转载请注明原作者,否则请勿转载 使用C/C++语言开发软件的程序员经常碰到这样的问题:有时候是程序编译没有问题,但是链接的时候总是报告函数不存在(经典的LNK 2001错误),有时候是程序编译和链接都没有错误,但是只要调用库中的函数就会出现堆栈异常。这些现象通常是出现在C和C++的代码混合使用的情况下或在C++程序中使用第三方的库的情况下(不是用C++语言开发的),其实这都是函数调用约定(Calling Convention)和函数名修饰(Decorated Name)规则惹的祸。函数调用方式决定了函数参数入栈的顺序..
阅读全文
隐式类型转换&& 负数的补码
摘要:http://www.cppblog.com/suiaiguo/archive/2009/07/16/90228.html隐式类型转换&& 负数的补码偶然看到一道C++面试题:voidfoo(void){unsignedinta=6;intb=-20;(a+b>6)?puts(">6"):puts("<=6");//puts为打印函数}问输出是什么?答案是输出 >6。这道题主要考察两个东西。1.隐式类型转换:int型变量转化成unsigned int, b成了正数.2.负数的补码:计算机系统中的数值是以补码形式表示
阅读全文
获得目录的file descriptor.
摘要:最近的模块中要用到 openat .其它原型为:(int dfd, const char __user *filename, int flags, int mode);第一个参数 是,dfd,找了许久都没找到怎样获得目录文件描述符,还是在google code search 中发现。int dirfd(DIR *dir);dirfd - get directory stream file descriptor.还是很怀念windows。MSDN组织的很好。
阅读全文
使用kprobes,截获execve系统调用,更谨慎的hook syscallTable的写法
摘要:转载,原文出处:http://blog.chinaunix.net/u/548/showart.php?id=386423关于截获execve等系统调用,很久以来存在一个问题:新函数不能直接调旧函数,否则导致stack不平衡,出错。曾经有高人用一串的汇编代码去平衡堆栈, 但对于偶们这些汇编菜鸟来说, 连阅读都很困难。而且, 好像gcc4.x下不支持 它使用的一种寻址方式了。这次使用kprobes来直接找do_execve,直接照搬sys_execve的实现代码。至于LICENSE的问题,谁用谁负责,我只是从技术角度上说可以这样做。(我的代码是GPL的)只截获了open和execve作为示例,其
阅读全文
什麼是 "asmlinkage"?--syscall原型说明
摘要:http://www.jollen.org/blog/2006/10/_asmlinkage.html什麼是 "asmlinkage"?jollen發表於 October 26, 2006 4:15 PM有網友來信問到,kernel 裡的 system call 實作函數中(C 函數),為什麼每一個函數原型宣告的前面都有一個 "asmlinkage" 的字串?例如:asmlinkagelong sys_nice(int increment)"asmlinkage" 是在 i386 system call 實作中相當重要的一個 gcc
阅读全文
使用pthread 线程退出时自动释放资源
摘要:线程退出时自动释放资源今天碰到一个问题:主线程pthread_create一个子线程A,子线程pthread_mutex_lock,然后调用其他的函数fun,最后从fun返回后再pthread_mutex_unlock.但是如果在fun中调用了pthread_exit异常退出,那么岂不是没释放锁就退出了,这肯定会引起死锁.解决办法一:在fun中调用pthread_exit之前都先调用pthread_mutex_lock释放锁,但是这就需要吧mutex作为参数传给fun,如果fun再调用了其他函数,就得一层一层的把mutex传下去,而且要找到fun及其调用的函数中的pthread_exit然后再
阅读全文
linux内核中用d_path得到绝对路径名
摘要:http://blogold.chinaunix.net/u2/86590/showart_2185876.htmllinux内核中用d_path得到绝对路径名Linux 内核的d_path()函数转换目录数据结构(dentry结构)到ASCII路径名字,指定的目录数据结构(dentry结构)路径返回在一个缓冲区中,这个缓冲区得内核开发人员自己申请,自己释放。在linux2.4.18以前的内核中,指定的目录数据结构(dentry结构)路径返回在一段大小为PAGE_SIZE字节的固定缓冲区中。 这样就存在一个著名的d_path()路径截断漏洞,也就是如果提交的的目录数据结构(dentry结构)路
阅读全文
C语言循环的小艺术
摘要:http://blog.csdn.net/csdn_zc/article/details/67769291. 质数判断对于这个,很多人可能会直接这样写:view plainintisPrime(intn)//函数返回1表示是质数,返回0表示不是质数{inti;for(i=2;i<n;i++)if(n%i==0)break;returni>=n;}又或者,有的人知道平方根的优化:view plainintisPrime(intn){inti,s=(int)(sqrt((double)n)+0.01);for(i=2;i<=s;i++)if(n%i==0)break;return
阅读全文
读LDD3,内存映射与DMA--PAGE_SHIFT,页帧号。
摘要:一,linux系统处理的地址类型1,用户虚拟地址:这是用户空间程序见到的常规地址。每个进程都有自己的虚拟地址空间2,物理地址物理地址用于处理器和系统内存之间3,总线地址总线地址在外围总线和内存这间使用4,内核逻辑地址内核逻辑地址组成了内核的常规地址空间。它一对一的映射部分或全部系统内存。在大多数架构中,内核逻辑地址与物理地址的不同,仅是它们之间存在一个固定的偏移。kmalloc 分配的就是逻辑地址,__get_free_pages?5,内核虚拟地址。它与内核逻辑地址的不同这处在于,内核虚拟地址不是一一对应到物理地址。内核虚拟地址空间是连续,但其映射的物理地址可以是离散的。内核逻辑地址是连续的,
阅读全文
Linux Memory Mapping--mmap kernel 2.6
摘要:近几天有个项目需要实现用户层与内核共享内存。在前几篇博客中找到的均是kernel2.4 的。实现过程中,改的痛苦。对kernel源码才,勉强搞定。后来在此网站(http://www.scs.ch/~frey/linux/memorymap.html)发现原来有一个demo:#include <linux/config.h>#include <linux/version.h>#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <
阅读全文
GCC的内嵌汇编语法 AT&T汇编语言语法
摘要:__asm__ __volatile__ GCC的内嵌汇编语法 AT&T汇编语言语法(一)2007年05月09日 12:36开 发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限 制,使用精练的汇编可以缩小目标代码的Size。另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能。所以我们必须了解汇编语言,即使你有可 能并不喜欢它。如果你是计算机专业的话,在大学里你应该学习过Intel格式的8086/80386汇编,这里就不再讨论。如果我们选择的OS开发工具是GCC以及GAS的话,就必须了
阅读全文
C++ explicit关键字应用方法详解
摘要:explicit作用:在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。explicit使用注意事项: * explicit 关键字只能用于类内部的构造函数声明上。 * explicit 关键字作用于单个参数的构造函数。 * 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换转载:http://developer.51cto.com/art/201002/183398.htmC++编程语言中有很多比较重要的关键字在实际编程中起着非常重要的作用。我们今天为大
阅读全文
字符集和字符编码[订正]
摘要:字符集和字符编码[订正]这个主题已经被N多人讨论过了,这里仅仅是个人总结,不是教程。字符集和字符编码潘孙友 2010-12-31 于遵义目录
一、字符集
二、字符编码
三、Windows平台 3.1 Codepage代码页 3.2 编码转换(API) 3.3 编码转换(CRT) [感谢@loop指出错误]
四、Linux/unix平台 4.1 iconv 4.2 ICU
一、字符集字符集是一个集合,描述并定义了这个集合中可以出现哪些字符,常见的字符有GB2312、GBK、GB18030、UNICODE等。字符集仅仅是一种规范,一种约定,我们也可以定义自己的字符集。举例来说,...
阅读全文
结合file和iconv命令转换文件的字符编码类型
摘要:http://hi.baidu.com/netwrom/blog/item/8885f31ef0d09ae7e1fe0b1c.html在很多类unix平台上都有一个iconv工具,可以用来转换字符编码;而对于普通的文本文件,file命令可以用来检测某个文件的字符编码类型,结合两者就可以非常方便地把一个未知编码类型的文本文件用某一指定编码类型进行编码。 例如,linux内核源代码的某些文件编码就不是用ASCII编码的(貌似跟有些hacker“怪样”的姓名有关),例如:$ cd /path/to/linux-2.6.17$ file kernel/sys.ckernel/sys.c: ISO-8.
阅读全文
浙公网安备 33010602011771号