• 2008-11-16

    shellcode /bin/sh - [软件与系统]

    Tag:Linux C
        Shellcode是一段注入到程序栈中二进制指令码,用于完成某些非法功能。下面是一个C程序,使用execve产生一个新的sh.

    #include <stdio.h>
    void myhacker()
    {
        char *pathname;
        char *argv[2];

      &nb...
  • 安装mysql

    kissgnu@kissgnu-desktop:~$ sudo apt-get install mysql-servel mysql-client
    下载安装过程中,会提示输入root密码

    重新启动mysql服务器:
    kissgnu@kissgnu-desktop:~$ sudo /init.d/mysql restart

    给普通用户授权操作数据库:
    kissgnu@kissgnu-desk...
  • 2008-03-19

    hacker一段C代码 - [编程]

    Tag:C
    看下面一段程序: //demo.c
    #include<stdio.h> void function(void) { char buf[9]; //#a int* ret; //#b ret = buf + 17; //#c (*ret) += 7; //#d } int main(int argc, char* argv[]) { int x; x = 55; ...
  • 2007-10-09

    Linux下读写速度测试 - [编程]

    Tag:C Linux
    一. 文件一次读入速度

    linux下读文件这东西最后都是要通过系统调用sys_read(fd,buf,count)来实现的,所以如果要提高速度,就是最简单地调用sys_read的封装,比如直接用read()或fread()。下面是我在linux下的几个测试。

    首先创建一个130M数据文件 dd if=/dev/zero of=data bs=1024k count=130
    分别用fread,read和fgets一次读入全部大小文件所消耗时间对比,...
  • 2007-09-16

    gcc 扩展typeof - [编程]

    Tag:C

    (FROM :  )
    Another way to refer to the type of an expression is with typeof. The syntax of using of this keyword looks like sizeof, but the construct acts semantically like a type name defined with typedef.

    There are two ways of writing the argument to typeof: with an expression or with a type. Here is an example with an expression:

         typeof (x[0](1))

  • 2007-06-01

    为什么会陷入死循环 - [编程]

    Tag:C
     看似简单的一段程序如下:
     int main()
    {
       int i,j[8];
       for(i=0;i<=8;i++)
        j[i]=0;
       return 0;

        gcc编译运行会陷入死循环.  
     
        因为变量 i 和数组 j[8]是保存在栈中,默认是由高地址向低地址方向存储. 输出变量地址可以发现: i 存储位置在0xbfd90dec, j[0]、j[1]...j[7]在内存的地址分别是0xbfdab0...
  • 2007-05-17

    二维数组 - [编程]

    Tag:C
    已知二维数组: int a[10][10],下面每一列等价
    a      
    a[i],*(a+i),*a 
    a+1,&a[1]
    a[1],*(a+1)
    a[1]+2,*(a+1)+2,&a[1][2]
    *(a[1]+2),*(*(a+1)+2),a[1][2]

    1. int a[10][10]
       int *p,i;
       p=a[3]; //使p指向a[3]这个数组(大小为10)的首地址,sizeof(p)=10*sizeof(int)
       i=*p[2]; //*p[2]表示a[3][2]
       下...
  • 2007-05-08

    C语言中的格式符 - [编程]

    Tag:C
    格式符即在printf()中的%x
     
     d/i 以大符号的十进制形式输出整数(整数不输出符号)
     o 以八进制无符号形式输出整数(不输出前导符)
     x,X 以十六进制无符号形式输出整数(大小写)
     u 用于输出unsigned类型数据
     f 实数格式输出,6位小数
     e 以指数形式输出实数,输出13位,其中:1位整数,1位小数点,6位小数,5位指数(含字符e和指数的符号)
     g 根据数值大小,自动选择f或e格式输出。
     c 以字符形式输出,只输出一个字符
     s 输出字符串

    另: printf("%#x\n",20);
     输出...
  • 2007-05-01

    五一快乐节 - [生活]

    Tag:Linux C
    终于在今天晚上,赶在"五一"节间夕把我的程序基本完成,目前主要功能全部实现,还剩下一点
    小事就是在程序几个关键部位添加log.file纪录,以及测试。

    这并不是一个很大的程序,所有手写代码加起来大约才1000+行,用到C/C++、sqlite3数据库C接口sql查询、Qt3作界面、系统相关的线程管理和同步等等。从拿到文档到现在一共半个多月里,我在写程序的过程中,确实是学到了很多东西。

    对于C/C++我比较熟悉,用于实现基本数据处理算法和Qt程序类继承实现。这期间阅读了primer c++的标准库,并且在我的程序里面尝试使用了vector,相比于数组和链表实在是太方便了,vector的最大好处是可以动态生成数组,自由插入元素。对于缓冲区溢出也有所接触。以前并没有太在意缓冲区溢出问题,觉得溢出就溢出了,这次确让我...
  • 2007-04-23

    C函数提取文件名编号 - [编程]

    Tag:C
    现在在做一个软件,遇到这样一个小问题:从目录字符串 "/home/foxman/source_data/234.bin" 中提取出文件数字编号234。C/C++处理字符串的能力并不是很强,所以想到下面的实现代码:
    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"

    int main()
    {
     char *filename="/home/foxman/source_data/234.bin";
     char *p=rindex(filename,'...
  • 资料来源于Qt官方文档,我总结了其中常用到的部分:

    一.  最简单的方法是调用静态函数来对话框获取文件:
      QString file = QFileDialog::getOpenFileName(
                        "/home/foxman",
                        ...
  • 2006-12-30

    几个字符串处理函数 - [编程]

    Tag:C

    这两天在看Fudan FireBird bbs 代码的telnet.c 和bbsd.c部分。觉得看代码真是学习编程的好方法,遇到一些以前没怎么注意的字符串处理函数,研究了一下。

    一.几个内存拷贝函数

    1.char *strcpy(char *dest,const char *src);
    strcpy将参数src字符串拷贝至参数dest所指的地址,返回参数dest的字符串起始地址。如果参数dest所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,考虑用strncpy()来取代。

    2.char * strncpy(char *dest,const char *src,size_t n);
    strncpy()会将参数src字符串拷贝前n个字符至参数dest所指的地址,返回参数dest的字符串起始地址。返回参数dest的字符串起始地址。

    3.void * memcpy (void * dest ,const void *src, size_t n);
    memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strncpy()不同的是,memcpy()会完整的复制n个字节,不.............

  • 1. 函数指针
    一般的函数指针可以这么定义:
    int(*func)(int,int);
    表示一个指向含有两个int参数并且返回值是int形式的任何一个函数指针. 假如存在这样的一个函数:
    int add2(int x,int y)
    {
    return x+y;
    }
    那么在实际使用指针func时可以这样实现:
    func=&add2; //指针赋值,或者func=add2; add2与&add2意义相同
    printf("func(3,4)=%d\n",func(3,4));

    事实上,为了代码的移植考虑,一般使用...
  • 2006-12-01

    julia集 - [编程]

    Tag:C

    对于复数数列,Zn=Z2n-1+Zc生成的点列,因复数常量Zc 和初值Z0的不同值,通过叠代的方式,会出现收敛、振动、发散情况。对于某个Zc, 数列不发散的初值Z0 的集合称为julia集合。

    固定Zc后,定下复平面上某个区域,对于该区域内的每个点,将这些点作为初值看点列的动态,如果可以不发散,那么在这个区域描绘改点。这样就可以得到julia集合图形了。

     

    http://feizf.blogbus.com/files/1165419940.jpg

  • 有一个问题一直困扰着我,就是怎么输出宏定义的内容,也就是
    #define STR abcdefg
    对于任意的一个宏定义(STR),怎样可以把它替代的内容(abcdefg)输出来?首先想到的是使用#算符,比如printf(#STR),可是只能输出STR, 没有预期结果。在AnsiC版讨论后找到一个方法:


    #define STR abcdefg
    #define mkstr(x) #x
    #define showstr(x) mkstr(x)
    int main()
    {
    printf("%s\n", showstr(STR));
    }

     

    宏是由外往内展开,对于showstr(x):如果x不是macro ,就直接转换为 mkstr(x); 如果xmacro, 会先展开x ,变为 showstr(abcdefg), 然后再展开成为 mkstr(abcdefg) (falls言)

    还有一种不是办法的办法,就是定义以宏STR命名的函......

  • 官方网站上的代码好像还是前一个版本没有更新,今天上午我对照书附录和原来的代码修改如下,分别是头文件apue.h, 标准出错代码sys.c,守护进程出错代码log.c, 供参考。
    可以从这儿下载: http://feizf.blogbus.com/files/1160056392.rar