-
2008-11-16
shellcode /bin/sh - [软件与系统]
Shellcode是一段注入到程序栈中二进制指令码,用于完成某些非法功能。下面是一个C程序,使用execve产生一个新的sh.
#include <stdio.h>
void myhacker()
{
char *pathname;
char *argv[2];
&nb... -
2008-10-27
ubuntu 8.04建立mysql C开发环境 - [编程]
安装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代码 - [编程]
看下面一段程序: //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下读写速度测试 - [编程]
一. 文件一次读入速度
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 - [编程]
(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)) -
看似简单的一段程序如下:
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... -
已知二维数组: 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]
下... -
格式符即在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);
输出... -
终于在今天晚上,赶在"五一"节间夕把我的程序基本完成,目前主要功能全部实现,还剩下一点
小事就是在程序几个关键部位添加log.file纪录,以及测试。
这并不是一个很大的程序,所有手写代码加起来大约才1000+行,用到C/C++、sqlite3数据库C接口sql查询、Qt3作界面、系统相关的线程管理和同步等等。从拿到文档到现在一共半个多月里,我在写程序的过程中,确实是学到了很多东西。
对于C/C++我比较熟悉,用于实现基本数据处理算法和Qt程序类继承实现。这期间阅读了primer c++的标准库,并且在我的程序里面尝试使用了vector,相比于数组和链表实在是太方便了,vector的最大好处是可以动态生成数组,自由插入元素。对于缓冲区溢出也有所接触。以前并没有太在意缓冲区溢出问题,觉得溢出就溢出了,这次确让我... -
2007-04-23
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,'... -
2007-04-22
Qt中 文件对话框QFileDialog 的使用 - [编程]
资料来源于Qt官方文档,我总结了其中常用到的部分:
一. 最简单的方法是调用静态函数来对话框获取文件:
QString file = QFileDialog::getOpenFileName(
"/home/foxman",
... -
这两天在看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个字节,不............. -
2006-12-08
C结构体中的函数指针与函数 - [编程]
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));
事实上,为了代码的移植考虑,一般使用... -
对于复数数列,Zn=Z2n-1+Zc生成的点列,因复数常量Zc 和初值Z0的不同值,通过叠代的方式,会出现收敛、振动、发散情况。对于某个Zc, 数列不发散的初值Z0 的集合称为julia集合。
固定Zc后,定下复平面上某个区域,对于该区域内的每个点,将这些点作为初值看点列的动态,如果可以不发散,那么在这个区域描绘改点。这样就可以得到julia集合图形了。

-
2006-10-30
让定义的宏输出自己的内容 - [编程]
有一个问题一直困扰着我,就是怎么输出宏定义的内容,也就是
#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); 如果x是macro, 会先展开x ,变为 showstr(abcdefg), 然后再展开成为 mkstr(abcdefg) (falls言)
还有一种不是办法的办法,就是定义以宏STR命名的函...... -
2006-10-02
“UNIX 环境高级编程“第二版 的几个附录源文件 - [编程]
官方网站上的代码好像还是前一个版本没有更新,今天上午我对照书附录和原来的代码修改如下,分别是头文件apue.h, 标准出错代码sys.c,守护进程出错代码log.c, 供参考。
可以从这儿下载: http://feizf.blogbus.com/files/1160056392.rar







