- 博客(141)
- 资源 (4)
- 收藏
- 关注
原创 深入汇编理解缓冲区溢出攻击
1.基本知识 子汇编程序里,调用函数使用CALL伪指令,原始的传递参数的方法可以是使用寄存器和全局标记(和高级语言,如C中的全局变量,在.data段定义的标记)。但是由于这样子函数不能模块化,而且如果程序功能稍大的话,代码将非常难于理解和维护,所以后来统一使用栈来管理函数调用,包括函数的参数传递,返回地址,局部变量。这样函数就可以模块化,并且可以写在另一个文件中。不过,在Linux内
2010-02-25 08:27:00
2861
2
原创 深入汇编语言来理解C语言中的传值和传址调用
这个问题是由我上次和一个同学讨论引起的,这个问题在我的另一篇博客中有写到:大概如下,当一个新参为指针的函数接受一个指针作为实参时,但是这个实参指针没有初始化,然后我在这个函数中用malloc为其分配内存,那么退出这个函数之后,这个实参是什么呢? 下面,我写了这个文件来测试test_vp.c-----------------------------------------
2010-01-21 00:16:00
3587
9
原创 深入理解Linux内核中的链表
最近,开始研读一下Linux的内核代码,刚一开始,就有令人惊叹的发现,不得不感叹内核代码设计得之美!单是最常用的链表也设计得不得不令人佩服!1.1.链表list_head include/linux/list.h 很经典,链表在内核中很常用,例如管理进程,进程的各个状态队列都是使用这个双向链表实现的。内核中的链表定义成和数据无关的形式,而不是通常我们使用的链表格
2010-01-14 11:02:00
7396
29
原创 Intel汇编入门实例
1.写一个最简单的C程序test.c-----------------------------------#includeint main(){ printf("Hello assembly!/n"); return 0;}然后编译它,不要进行汇编。$gcc -S test.c生成文件test.s,然后使用vim打开之,内容如下:test.s--
2010-01-13 22:54:00
2198
原创 在Linux环境下单机上实现MySQL5主从数据库同步复制
1.安装MySQL(略)2.启动多个MySQL服务器 要实现在单机上启动多个MySQL服务器,有两种方法,一种是直接使用mysqld_safe来运行多个服务器当然这样分别编辑配置文件,而且关闭服务器的时候也要读取配置文件,所以比较麻烦,另一种方法是使用MySQL提供到工具mysqld_multi脚本来管理多个服务器,下面使用的方法是mysqld_safe来实现。3.前置条
2010-01-09 17:24:00
3852
原创 深入理解Linux kernel(内核)中的signal函数
在Linux内核代码中,有一个信号处理绑定器函数signal,它到原型定义如下,通过man 2 signal可以查看其原型。#include typedef void (*sighandler_t)(int); (1)sighandler_t signal(int signum,sighandler_t handler); (2)第一句是包含头文件,第二句是类型定义,第
2010-01-08 18:08:00
4342
原创 C指针的疑惑(函数传址调用,如果传递的指针没有初始化会怎么样?)
有下列简单的C程序,想一想程序运行的结果是什么?#include#includeint *p;//p=NULL (1)void test_p(int *p){ p=(int *)malloc(sizeof(int)); if(!p){ perror("malloc faild/n"); }else{ pri
2010-01-07 21:34:00
2352
3
原创 Ubuntu下出现Mysql error(2002)的解决方法
过了一阵子后,为了写分布式作业,重新使用Mysql时,发现虽然启动成功了,但是连接的时候去出现如下错误ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)根据提示是/var/run/mysqld/mysqld.sock文件不
2010-01-05 23:50:00
35260
5
原创 Ubuntu-9.10中安装zsh和rxvt
zsh是一个shell解释器,就如最流行的bash一样,默认ubuntu中没有安装zsh,下面自己安装。1.安装zsh $sudo apt-get install zsh zsh-doc zsh-lovers2.启动zsh $zsh首次启动zsh时会提示配置个性化文件,你也可以跳过,当然还可以在网上下载别人配置好的配置文件,在别人的基础上再个性化,这是最好的方法。
2010-01-02 23:30:00
3794
原创 Ubuntu中配置awesome3.x
安装好awesome后,就可以登录进入awesome好好体验一下了,总的感觉就是很简洁,轻量就是快啊。awesome默然启动后,主题是深色的。最上面一栏是工具栏,从最左边的logo菜单,然后是1-9工作区,在awesome中称作tag,然后就是窗口列表栏,最右边是systray。 在awesome中启动的程序,默认都是没有窗口边框的,因为不用使用鼠标去最大最小化,关闭。而且
2010-01-02 10:15:00
5068
原创 Ubuntu中使用awesome
1.awesome介绍 awesome是一款平铺式窗口管理器,将所有打开的窗口设置成各种平铺方式,让它们之间无间隙的平铺于桌面上。awesome可以全部使用键盘来操作窗口2.安装 $sudo apt-get install awesome awesome-extra3.使用 注销用户,然后在登录时选择awesome即可。4.基本快捷键 Super
2009-12-31 13:40:00
7985
原创 配置编译内核(Linux kernel)
虽然以前也编译过内核,但是关于内核配置选项特别是有关本机驱动这块还是不熟悉,因为没有通过确定有效的途径知道当前工作正常的内核中到底使用了什么驱动模块来控制硬件,最近看到一本书《Linux kernel in a netshell》,感觉讲的还不错,所以记下笔记。1.编译内核的工具 gcc binutils(ld) binutils是gcc的工具链,用来链
2009-12-24 08:55:00
2510
原创 使用prism将网络程序转换成桌面程序
在Ubuntu(karmic koala)下完成。1.安装Prism$sudo apt-get install prism Prism已经整合了一些常见的网络应用程序,如Gmail,Gtalk,youtube,Google Reader等,可以直接安装,如:$sudo apt-get install prism-google-reader prism-google-mail
2009-12-18 13:53:00
1939
原创 《C和指针》笔记1
1.scanf格式符 p9ld longlf double2.三字母词 p22 为了表示一些特殊的字符,在老式的机器键盘中可能没有的字符,特别约定了一种三字母词,三字母词都以??开始,如下:??( [ ????) ] ??> } ??/ / ?? ^ 3
2009-12-17 10:52:00
1124
原创 DrawIt:Vim画图插件(可在vim中画基本示意图)
1.下载$ wget -O DrawIt.vba.gz http://www.vim.org/scripts/download_script.php?src_id=8798切记:不要使用tar解压,它不是压缩包文件。2.解压$vim DrawIt.vba.gz:so %:q使用vim打开以后,就会发现命令提示中提示使用命令:so %来解亚。3.安装安装很容易,将
2009-12-17 09:48:00
11660
5
原创 搜狗云输入法的Firefox插件
搜狗云输入法推出了firefox浏览的插件,可以使用Firefox访问:http://pinyin.sogou.com/cloud/来安装。使用了一下,感觉还可以,毕竟搜狗输入法比ibus好用。有以下特点:1.可用于浏览器中文字的输入,但是不能在电脑的其他地方输入,如普通文件。2.即使勾选了“地址栏“,但是还是不能在地址栏中启动输入法。3.使用云输入法时要保持本地输入法处于英文状态
2009-12-16 00:04:00
1663
原创 GDB完全使用指南(1)
1.查看源程序 list llist/l列出当前行附近的代码,可以使用参数指定当前行,以及指定一个范围,如l 10,l 10,202.运行程序的命令 运行调试的程序时,使用 run r命令,run后面可以跟发给这个程序的任何参数,包括输入输出重定向,文件通配符等。以及传递给main函数的参数,当运行了带参数的run之后,再次运行时就
2009-12-10 12:47:00
1457
原创 深入理解C语言中的free函数。
#include#includeint main(){ int *test=(int *)calloc(1,sizeof(int)); if(!test) printf("分配内存错误/n"); else{ printf("指针地址:%X/n",(unsigned int)test); printf("指向
2009-12-10 12:32:00
27234
6
原创 P2P,UDP和TCP穿透NAT
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Fo
2009-11-29 14:56:00
30672
11
原创 ubuntu下安装pthread的manpages(man 手册)
由于学习多线程编程,所以用到pthread,但是man的时候却发现没有pthread函数库的手册页,然后安装$sudo apt-get install glibc-doc 安装以后,发现还是有很多函数不全,只有一小部分pthread的函数,使用man -k pthread或apropos pthread可以查找到当前manpages中关于pthread的手册。安装manpag
2009-11-26 21:59:00
14871
6
原创 在Ncurses中显示汉字,支持中文
最近在学习Ncurses编程,因为确实比较喜欢终端下的程序:简洁、漂亮、快速、轻量。但是ncurses库默认并不支持中文显示,怎么办?解决方法如下: 1.安装ncursesw开发库以在ubuntu-9.10下为例:$sudo apt-get install libncursesw5 libncursesw5-dev 2.使用setlocale
2009-11-25 22:59:00
6532
原创 关于sprintf和snprintf格式化字符串输出到字符串缓冲区
都知道,sprintf,snprintf是printf函数族的一员,只是它的输出对象是一个字符串缓冲区,而不是stdout或者文件。所以sprintf,snprintf很适合用来生成自己的格式化参数,易于解析。但是要注意的是关于字符串结束的问题,假设有这样的程序#includeint main(int argc,char *argv[]){ int len;
2009-11-24 10:07:00
7934
原创 C语言中的printf族函数深入详解
使用manpages(man 3 printf)查看到的printf函数如下定义:#includeint printf(const char *format,...);int fprintf(FILE *stream,const char *format,...);int sprintf(char *str,const char *format,...);int snpri
2009-11-21 23:46:00
4278
1
原创 输入理解C语言中的函数声明
看了C陷阱与缺陷,第一个给我震撼的就是理解函数声明了,下面是我的理解。1.理解函数声明 为了模拟开机启动时的情形,我们必须设计出一个C语句,以显示调用位于地址0的子例程。调用语句如下: (*(void (*)())0)();胆颤了吧?首先我们从函数的声明说起:有如下一个函数 void func(){...}那么,要想声明一个函数指针,指向这类函数,怎样声明
2009-11-19 21:37:00
2246
原创 深入理解C语言中的指向函数的指针和返回指针的函数!
#include#include/* * 返回指针的函数和指向函数的指针 *//* * 定义一个函数,返回一个void指针,在C语言中,void指针可以 * 指向任何类型 */void *func(){ /* * 一种很容易犯的错误,将局部变量的地址返回 */ int m; printf("defi
2009-11-18 23:06:00
3740
原创 深入理解C语言中的指向函数的指针!
#include#include/* * 函数和指向函数的指针 */void fvoid(){ /* * 定义一个函数 */ printf("define as void fvoid()/n");}/* * 定义一个函数指针,指向函数类型为参数为空,返回值为void。 */void (*pvoid)(
2009-11-18 23:04:00
991
原创 CSDN的博客搜索好弱!
枉我这么信任CSDN,直接把日记写在了blog上,然后今天上来找的时候,才发现根本搜索不到自己想要的,而且我那个blog已经发表好几天了,有图有真相: 图一.输入关键字后点击搜索
2009-11-17 20:07:00
818
原创 莫名其妙的问题:ubuntu主题没有了!
今天学习GTK+,所以下载了源码包,然后安装了必要的依赖,装好后,因为默认安装是安装在/usr/local/include/目录下了,为了编程的方便,所以就建立了符号链接到/usr/include/目录下。 一晃就是一天了,现在打开某些程序,发现怎么显示不对,跟我的gentoo安装了gnome时的默认界面一样,很朴素的样子,怎么回事?一看Firefox还好,还没
2009-11-16 17:34:00
1809
1
原创 火狐插件: Vimperator操作指南(2)
10.浏览控制 禁止除了键以外的其他Vimperator按键,然你回到火狐模式 o/:o/:open url 打开url,可以打开多个,打开本地文件,url还可以是关键词,这会启用默认搜索引擎去检索 :dialog searchengines 可以设置你的默认搜索引擎,或 :open google key_word 指定搜索引擎 T
2009-11-16 11:02:00
1838
原创 火狐插件: Vimperator操作指南
1.介绍 Vimperator是一个自由的火狐插件,给你提供Vim一样的按键来操作火狐。让你丢掉鼠标,异常高效,特别是一边浏览,一边写代码的时候。1.1.警告 Vimperator启用以后会自动关闭火狐的菜单栏和工具栏,如果你想要开启请在命令模式下输入:set guioptions+=mT,m(menu),T(Toolbar)。 另外,你可以使用:help来查
2009-11-16 10:26:00
3884
原创 linux c问题集锦
1.为什么我写的Makefile,在编辑了源代码文件后,使用make,make却提示目标文件已经为最新的了! 2.OpenGL,在窗口中画点时,怎样使用glVertexi()函数?因为传递的参数如果是大于1的int型,则不行,而必须传递[-0.1~0.1]之间的float,而且使用函数gVertex2f(). 3.OpenGL,使用菜单时,怎样解决点击菜单后不要捕捉GLUT_U
2009-11-15 22:43:00
899
原创 vim之于程序员--强大的vim结合ctags的使用
1.安装ctags 1)到http://ctags.sf.net下载最新的ctags 2)使用apt-get 安装$sudo apt-get install exuberant-ctags2.使用ctags生成tags,$ctags *.c生成所有C文件的tags,生成的文件就叫tags$ctags -R .递归生成所有目录下的tags。3.在vim中使用c
2009-11-14 19:55:00
3090
原创 使用 gdb查看内存
刚开始在linux下编程的时候,很少使用gdb,因为写的程序都很小,然后看了一些比较好的C语言书后,发现了一些有趣的东西,比如malloc ,calloc,free等,然后就想调试程序,看看内存中到底是怎么一回事,所以就在vc6上面调,但是,不能以为这个原因就去用windows吧,所以还是学学gdb怎么查看内存单元,^_^。x /nfu addressn 要查看几个内存单元
2009-11-14 18:10:00
3290
原创 从零开始配置mutt-fetchmail-procmail-msmtp
注意:使用qq邮箱做的测试,请确保开启了qq邮箱的pop/smtp/imap服务,具体在邮箱的设置页面中。1.安装软件msmtp$sudo apt-get install msmtpmsmtp是一个轻量级的发送邮件程序,可以和mutt结合使用,因为sendmail过于庞大,所以采用轻量级的msmtp,建立配置文件$vi $HOME/.msmtprc内容如下:accoun
2009-11-14 15:25:00
9003
3
原创 ubuntu9.10中配置grub1.97(Grub2)
在ubuntu9.10(karmic koala)中配置grub1.97,grub1.97是ubuntu9.10发行是默认的,如果需要使用以前老的grub0.97,可以自己手动安装,运行$sudo apt-get install grub即可,然后运行$sudo update-grub就会检测系统上的系统,生成/boot/grub/menu.lst文件。但是可能不能检
2009-11-14 11:58:00
3295
4
原创 加密与认证
1.DES(Data Encryption Standard,数据加密标准)于1977年发表,这一加密方法在密钥的基础上进行字符替换,又对字符顺序进行重新排列。2.AES(Advanced Encryption Standart,高级加密标准),2000年,Rijndael算法被算作AES。和DES一样,也是一个共享密钥的算法,即一种对称加密算法。3.公钥加密(public-key
2009-11-13 20:10:00
1597
原创 在ubuntu9.10(karmic koala)中重新启用Ctrl-Alt-Backspace来重启X系统
在Gnome中,默认使用Ctrl-Alt-Backspace组合键来重启X系统,但是在ubuntu中,从8.10就开始禁止这个组合键了,其实可以在xorg.conf文件中添加一个section,设置dontzap为flase就可以了,但是这里有更安全,简单的方法,避免自己去修改xorg.conf文件《系统》 《首选项》 《键盘》 《布局》
2009-11-12 12:40:00
1357
原创 Linux下实现RPC编程
Linux 下面使用RPC需要使用到命令rpcgen.在Linux下开发RPC程序流程如下:1.写一个rpc程序 如test.x2.使用rpcgen生成必须的文件,通常是客户端和服务器端以及头文件 $rpcgen test.x3.使用rpcgen生成服务器端和客户端的C语言代码 $rpcgen -Ss -o test_server.c test.x
2009-11-11 17:52:00
5148
2
原创 Ubuntu9.10中安装配置mysql5
MYSQL5今天在ubuntu上安装了mysql5.1.12-beta版本,为了学习一下mysql,毕竟我还是开源的支持者。1.安装 安装过程仔细看源码包中的INSTALL-BINARY就行了,注意使用root用户,特别是在运行scripts/mysql_install_db命令时。2.设置用户权限 安装成功后,会出现提示,叫你为数据库的root用户设置密码,
2009-11-10 09:20:00
1162
1
原创 malloc系列函数
malloc系列函数:头文件 void*calloc(size_t num,size_t size); 功能:num是请求分配的单元个数,size是每个单元的大小,如果成功则返回一个内存指针,指向一块内存,并且和malloc不同的是:这块内存已经被清零了!失败返回NULL。 例子:int *p=(int *)calloc(4,sizeof(int)); 请求
2009-11-09 09:50:00
2381
sed and awk
2009-08-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人