Linux下C和汇编
文章平均质量分 61
chengweiv5
喜欢的动漫:海贼王,火影,宫崎峻系列
喜欢的游戏:跑跑卡丁车,暗黑,经典红白机
喜欢的系统:Ubuntu, Debian, Gentoo
喜欢的语言:C, 汇编, shell
展开
-
缓冲区溢出——堆溢出
上次讲的是栈溢出,其实不止是栈,在使用堆时也会溢出。例如:#include #inlcude int main(){ char *name; char *color; color=malloc(10);//使用内存分配函数在堆中 name=malloc(10);//分配内存 strcpy(name,"leisure");原创 2009-05-16 00:11:00 · 5188 阅读 · 0 评论 -
深入理解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 · 27270 阅读 · 6 评论 -
深入汇编语言来理解C语言中的传值和传址调用
这个问题是由我上次和一个同学讨论引起的,这个问题在我的另一篇博客中有写到:大概如下,当一个新参为指针的函数接受一个指针作为实参时,但是这个实参指针没有初始化,然后我在这个函数中用malloc为其分配内存,那么退出这个函数之后,这个实参是什么呢? 下面,我写了这个文件来测试test_vp.c-----------------------------------------原创 2010-01-21 00:16:00 · 3588 阅读 · 9 评论 -
关于sprintf和snprintf格式化字符串输出到字符串缓冲区
都知道,sprintf,snprintf是printf函数族的一员,只是它的输出对象是一个字符串缓冲区,而不是stdout或者文件。所以sprintf,snprintf很适合用来生成自己的格式化参数,易于解析。但是要注意的是关于字符串结束的问题,假设有这样的程序#includeint main(int argc,char *argv[]){ int len;原创 2009-11-24 10:07:00 · 7938 阅读 · 0 评论 -
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 · 4283 阅读 · 1 评论 -
深入理解C语言中的指向函数的指针!
#include#include/* * 函数和指向函数的指针 */void fvoid(){ /* * 定义一个函数 */ printf("define as void fvoid()/n");}/* * 定义一个函数指针,指向函数类型为参数为空,返回值为void。 */void (*pvoid)(原创 2009-11-18 23:04:00 · 994 阅读 · 0 评论 -
深入理解C语言中的指向函数的指针和返回指针的函数!
#include#include/* * 返回指针的函数和指向函数的指针 *//* * 定义一个函数,返回一个void指针,在C语言中,void指针可以 * 指向任何类型 */void *func(){ /* * 一种很容易犯的错误,将局部变量的地址返回 */ int m; printf("defi原创 2009-11-18 23:06:00 · 3744 阅读 · 0 评论 -
输入理解C语言中的函数声明
看了C陷阱与缺陷,第一个给我震撼的就是理解函数声明了,下面是我的理解。1.理解函数声明 为了模拟开机启动时的情形,我们必须设计出一个C语句,以显示调用位于地址0的子例程。调用语句如下: (*(void (*)())0)();胆颤了吧?首先我们从函数的声明说起:有如下一个函数 void func(){...}那么,要想声明一个函数指针,指向这类函数,怎样声明原创 2009-11-19 21:37:00 · 2250 阅读 · 0 评论 -
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 · 5166 阅读 · 2 评论 -
C语言中的malloc和free造成内存泄露?
首先,说一下我对内存泄露的理解,内存泄露是指:程序中一块不再使用的内存没有被释放,造成内存保持占用状态,使操作系统不能将内存分配给其它的程序(进程)。在C语言,用的最多的管理内存的函数莫过于malloc和free了,下面我用VC6.0做了一个小测试,源码如下: #include#includeint main(){ int *pint=(int *)malloc(siz原创 2009-11-08 22:32:00 · 9122 阅读 · 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 · 2385 阅读 · 0 评论 -
Linux下RPC的hello world
Linux 下面使用RPC需要使用到命令rpcgen.在Linux下开发RPC程序流程如下:1.写一个rpc程序, 如test.x2.使用rpcgen生成必须的文件,通常是客户端和服务器端以及头文件 $rpcgen test.x3.使用rpcgen生成服务器端和客户端的C语言代码 $rpcgen -Ss -o test_server.原创 2009-11-08 00:35:00 · 4885 阅读 · 0 评论 -
C语言中重定义 错误
假设有三个文件node.h //定义节点list.h //对链表的操作函数test.c //测试函数包含关系如下:list.h中#include "node.h"test.c中#include "list.h"#include "node.h"#include ... 省略其原创 2009-10-29 11:45:00 · 8645 阅读 · 0 评论 -
Linux socket编程入门(1)
server.c和client.c的头文件 server.c的代码如下-----------------------------------------------------------------------------------------------#define BUF_SIZE 10int main(){ int s_socketfd;原创 2009-10-22 10:51:00 · 962 阅读 · 0 评论 -
C指针(1)
指针:1.指针声明后要赋值!否则是空指针,可不知道指向了哪里例如:void swap(int *a,int *b){ int *tmp; *tmp=*a; *a=*b; *b=*tmp;}本来是想利用上面的swap函数实现两个数的互换,但是*tep=*a;这句话是有误的,因为指针tmp没有被赋值!是用gcc编译时不会出错,但是运行原创 2009-09-27 00:00:00 · 984 阅读 · 0 评论 -
C指针(2)
4.函数和指针4.1. 指向函数的指针 指向函数的指针即通常说的函数指针,正是由于这些简称,所以它和返回指针的函数(指针函数)容易混淆,而且也由于写法上比较相近,就像数组指针(int (*p)[4])和指针数组(int *p[4])一样,前者表示指针变量p指向一个一维数组,这个数组含有4个int型变量,所以p++后,P就指向下一个一维数组;而后者表示p是一个数组,含有4个指向int原创 2009-09-27 23:26:00 · 711 阅读 · 2 评论 -
常见缓冲区溢出函数
最常见的C/C++缓冲区溢出函数:getsstrcpygetsfgetsgetwssprintfstrcatstrncpyscanfmemcpymemmove原创 2009-05-16 00:11:00 · 2990 阅读 · 0 评论 -
深入汇编理解缓冲区溢出攻击
1.基本知识 子汇编程序里,调用函数使用CALL伪指令,原始的传递参数的方法可以是使用寄存器和全局标记(和高级语言,如C中的全局变量,在.data段定义的标记)。但是由于这样子函数不能模块化,而且如果程序功能稍大的话,代码将非常难于理解和维护,所以后来统一使用栈来管理函数调用,包括函数的参数传递,返回地址,局部变量。这样函数就可以模块化,并且可以写在另一个文件中。不过,在Linux内原创 2010-02-25 08:27:00 · 2863 阅读 · 2 评论