码迷,mamicode.com
首页 > 其他好文 > 详细

C 可变长参数

时间:2015-08-02 18:12:20      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

前面说到可变长参数:

最后重要的是:第一个参数为后面的参数的形式,format.i.e. printf

在这篇中想说的是不安全的问题 -.-!其实就是我瞎搞

先上代码

技术分享
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

void subfunc(char *format,...){
    int i;
    va_list ap;
    va_start(ap,format);
    for(i=0;format[i]!=\0;i++){
        switch(format[i]){
            case s:
              printf("%s\n",va_arg(ap,char*));
              break;
            case d:
                printf("%d\n",va_arg(ap,int));
                break;
            default:
                printf("format over.\n");
                break;
        }
    }
    va_end(ap);
    return;
}

void func(){
    int a[100];
    int i=0;
    for(i=0;i<100;i++)
        a[i]=-1;
    subfunc("ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",1);
    return;
};

int main(void)
{
    int pause;
    
    func();
    
    scanf("%d",&pause);
    
    return 0;
}
C code

 

 

在这个代码中,我想做的:在子函数(或者说函数栈上方的函数)去读取函数栈下面函数的数据。

在可变长参数的函数的写法中,一个参数是后面参数的形式,所以如果我们在第一个参数后面提供的参数数量,和第一个参数要求的数量不同。那么就应该读取到函数栈下面的数据

 

既然可以读到函数栈下面的函数的数据,那么自然可以获得下面函数的返回地址等信息,那么可以伪装返回?有待测试……

C 可变长参数

标签:

原文地址:http://www.cnblogs.com/yoru/p/4696316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!