关闭

深入汇编理解缓冲区溢出攻击

1.基本知识    子汇编程序里,调用函数使用CALL伪指令,原始的传递参数的方法可以是使用寄存器和全局标记(和高级语言,如C中的全局变量,在.data段定义的标记)。但是由于这样子函数不能模块化,而且如果程序功能稍大的话,代码将非常难于理解和维护,所以后来统一使用栈来管理函数调用,包括函数的参数传递,返回地址,局部变量。这样函数就可以模块化,并且可以写在另一个文件中。不过,在Linux内...
阅读(1976) 评论(2)

深入汇编语言来理解C语言中的传值和传址调用

     这个问题是由我上次和一个同学讨论引起的,这个问题在我的另一篇博客中有写到:大概如下,当一个新参为指针的函数接受一个指针作为实参时,但是这个实参指针没有初始化,然后我在这个函数中用malloc为其分配内存,那么退出这个函数之后,这个实参是什么呢?    下面,我写了这个文件来测试test_vp.c-----------------------------------------...
阅读(2828) 评论(9)

深入理解C语言中的free函数。

#include#includeint main(){    int *test=(int *)calloc(1,sizeof(int));    if(!test)        printf("分配内存错误/n");    else{        printf("指针地址:%X/n",(unsigned int)test);        printf("指向...
阅读(14769) 评论(3)

关于sprintf和snprintf格式化字符串输出到字符串缓冲区

    都知道,sprintf,snprintf是printf函数族的一员,只是它的输出对象是一个字符串缓冲区,而不是stdout或者文件。所以sprintf,snprintf很适合用来生成自己的格式化参数,易于解析。但是要注意的是关于字符串结束的问题,假设有这样的程序#includeint main(int argc,char *argv[]){    int len;   ...
阅读(6463) 评论(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...
阅读(3425) 评论(1)

输入理解C语言中的函数声明

看了C陷阱与缺陷,第一个给我震撼的就是理解函数声明了,下面是我的理解。1.理解函数声明    为了模拟开机启动时的情形,我们必须设计出一个C语句,以显示调用位于地址0的子例程。调用语句如下:    (*(void (*)())0)();胆颤了吧?首先我们从函数的声明说起:有如下一个函数    void func(){...}那么,要想声明一个函数指针,指向这类函数,怎样声明...
阅读(1669) 评论(0)

深入理解C语言中的指向函数的指针和返回指针的函数!

 #include#include/* * 返回指针的函数和指向函数的指针 *//* * 定义一个函数,返回一个void指针,在C语言中,void指针可以 * 指向任何类型 */void *func(){    /*     * 一种很容易犯的错误,将局部变量的地址返回     */    int m;    printf("defi...
阅读(3173) 评论(0)

深入理解C语言中的指向函数的指针!

 #include#include/* * 函数和指向函数的指针 */void fvoid(){    /*     * 定义一个函数     */    printf("define as void fvoid()/n");}/* * 定义一个函数指针,指向函数类型为参数为空,返回值为void。 */void (*pvoid)(...
阅读(779) 评论(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...
阅读(4264) 评论(2)

malloc系列函数

malloc系列函数:头文件  void*calloc(size_t num,size_t size); 功能:num是请求分配的单元个数,size是每个单元的大小,如果成功则返回一个内存指针,指向一块内存,并且和malloc不同的是:这块内存已经被清零了!失败返回NULL。 例子:int *p=(int *)calloc(4,sizeof(int)); 请求...
阅读(1890) 评论(0)

C语言中的malloc和free造成内存泄露?

      首先,说一下我对内存泄露的理解,内存泄露是指:程序中一块不再使用的内存没有被释放,造成内存保持占用状态,使操作系统不能将内存分配给其它的程序(进程)。在C语言,用的最多的管理内存的函数莫过于malloc和free了,下面我用VC6.0做了一个小测试,源码如下: #include#includeint main(){ int *pint=(int *)malloc(siz...
阅读(6370) 评论(1)

Linux下RPC的hello world

Linux 下面使用RPC需要使用到命令rpcgen.在Linux下开发RPC程序流程如下:1.写一个rpc程序,       如test.x2.使用rpcgen生成必须的文件,通常是客户端和服务器端以及头文件       $rpcgen test.x3.使用rpcgen生成服务器端和客户端的C语言代码       $rpcgen -Ss -o test_server....
阅读(4245) 评论(0)

C语言中重定义 错误

假设有三个文件node.h //定义节点list.h //对链表的操作函数test.c //测试函数包含关系如下:list.h中#include "node.h"test.c中#include "list.h"#include "node.h"#include ... 省略其...
阅读(2939) 评论(0)

Linux socket编程入门(1)

server.c和client.c的头文件 server.c的代码如下-----------------------------------------------------------------------------------------------#define BUF_SIZE 10int main(){ int s_socketfd;...
阅读(766) 评论(0)

C指针(2)

4.函数和指针4.1. 指向函数的指针     指向函数的指针即通常说的函数指针,正是由于这些简称,所以它和返回指针的函数(指针函数)容易混淆,而且也由于写法上比较相近,就像数组指针(int (*p)[4])和指针数组(int *p[4])一样,前者表示指针变量p指向一个一维数组,这个数组含有4个int型变量,所以p++后,P就指向下一个一维数组;而后者表示p是一个数组,含有4个指向int...
阅读(511) 评论(2)

C指针(1)

指针:1.指针声明后要赋值!否则是空指针,可不知道指向了哪里例如:void swap(int *a,int *b){    int *tmp;    *tmp=*a;    *a=*b;    *b=*tmp;}本来是想利用上面的swap函数实现两个数的互换,但是*tep=*a;这句话是有误的,因为指针tmp没有被赋值!是用gcc编译时不会出错,但是运行...
阅读(815) 评论(0)

常见缓冲区溢出函数

最常见的C/C++缓冲区溢出函数:getsstrcpygetsfgetsgetwssprintfstrcatstrncpyscanfmemcpymemmove...
阅读(1277) 评论(0)

缓冲区溢出——堆溢出

上次讲的是栈溢出,其实不止是栈,在使用堆时也会溢出。例如:#include #inlcude int main(){    char *name;    char *color;    color=malloc(10);//使用内存分配函数在堆中    name=malloc(10);//分配内存    strcpy(name,"leisure");    ...
阅读(3400) 评论(0)
    个人资料
    • 访问:554766次
    • 积分:7092
    • 等级:
    • 排名:第3339名
    • 原创:141篇
    • 转载:1篇
    • 译文:0篇
    • 评论:105条
    最新评论