首页 > 其他 > 详细

C 可变长参数

时间:2015-08-02 18:11:38      阅读:198      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!