C++ 如何使用主参数添加更多堆栈?

C++ 如何使用主参数添加更多堆栈?,c++,c,stack,C++,C,Stack,我正在尝试向我的程序中添加更多堆栈,但是我的程序使用main和参数,但是我需要使用main和args来测试porpus,但是在这种情况下,如何添加use\u declspec和args?我正在添加更多的堆栈,因为我正在为安全问题创建一些内容,但我无法在没有堆栈限制的情况下显示完整的experimet _declspec(noinline) int old_main(int argc, const char* argv[]) { if (argc != 2) { p

我正在尝试向我的程序中添加更多堆栈,但是我的程序使用main和参数,但是我需要使用main和args来测试porpus,但是在这种情况下,如何添加use
\u declspec
和args?我正在添加更多的堆栈,因为我正在为安全问题创建一些内容,但我无法在没有堆栈限制的情况下显示完整的experimet

_declspec(noinline) int old_main(int argc, const char* argv[]) {
    if (argc != 2)
    {
        printf("Usage: %s examlpe", argv[0]);
        exit(1);
    }
    char buf[MAX_BUFFER];
    strcpy(buf, argv[1]);
    printf("%s hi!\n", buf);
}

int main() {
    char moreStack[10000];
    for (int i = 0; i < sizeof(moreStack); ++i)
        moreStack[i] = i;

    return old_main();
}

\u declspec(noinline)int old_main(int argc,const char*argv[]){
如果(argc!=2)
{
printf(“用法:%s examlpe”,argv[0]);
出口(1);
}
char buf[最大缓冲区];
strcpy(buf,argv[1]);
printf(“%s hi!\n”,buf);
}
int main(){
char-moreStack[10000];
对于(int i=0;i
最简单的方法可能是:

  • argc
    argv
    保存到全局变量
  • 创建一个
    pthread\u attr\u t
    对象并调用
    pthread\u attr\u setstacksize
    来设置所需的堆栈大小
  • 使用设置为创建分离线程的
    pthread\u attr\u t
    调用
    pthread\u create
    ,以运行将全局保存的
    argc
    argv
    值传递给
    old\u main
    函数的函数
  • 调用
    pthread\u exit
    终止原始线程
  • 新创建的线程继续使用所需大小的堆栈执行
    old_main

  • 如果您想要更多的堆栈,在链接可执行文件时可能会有一个选项。

    假设Windows和MSVC作为编译器,您似乎要查找的是或。任何一个都会调整可执行文件主线程的堆栈大小。

    根本不清楚您要做什么。你想解决什么问题?为什么要“添加更多堆栈”?我想在我的程序中添加更多堆栈,因为我正在做一些安全性实验。我不明白这一点:“我的程序使用带参数的main,但我需要使用带参数的main进行测试。”您有X,但您想使用X。所以问题解决了吗?根据操作系统的不同,可能存在配置堆栈大小的方法。但在本例中,根本没有明显的理由说明
    moreStack
    需要作为堆栈变量。只要把它变成一个全局变量或一个静态局部变量,我还是不明白。是否要分配自己的堆栈,然后切换到该堆栈?你真正的问题是“如何切换到使用我分配的堆栈?”@DavidSchwartz