【问题标题】:how can I add more stack with main args? [closed]如何使用主要参数添加更多堆栈? [关闭]
【发布时间】:2020-05-11 06:51:58
【问题描述】:

我正在尝试在我的程序中添加更多堆栈,但是我的程序使用带有参数的 main,但我需要使用带有 args 的 main 来测试 porpuses,但是在这种情况下如何添加使用 _declspec 和 args ?我正在添加更多堆栈,因为我正在为安全问题创建一些内容,但我无法在不限制堆栈的情况下展示完整的实验

_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();
}

【问题讨论】:

  • 完全不清楚您要做什么。你想解决什么问题?为什么要“添加更多堆栈”?
  • 我想在我的程序中堆叠更多的堆栈,因为我正在做一些安全实验
  • 我想不通:“我的程序使用带有参数的 main,但出于测试目的,我需要使用带有 args 的 main。”你有X,但你想使用X。那么问题解决了吗?根据操作系统,可能有一些方法可以配置堆栈大小。但在这种情况下,moreStack 根本不需要是堆栈变量,没有明显的理由。只需将其设为全局变量或静态局部变量即可。
  • 我还是没跟上。你想分配你自己的堆栈然后切换到那个堆栈吗?您真正的问题是“如何切换到使用我分配的堆栈?”
  • @DavidSchwartz 完全正确

标签: c++ c stack


【解决方案1】:

可能最简单的方法如下:

  1. 将argc 和argv 保存到全局变量中。
  2. 创建一个pthread_attr_t 对象并调用pthread_attr_setstacksize 来设置所需的堆栈大小。
  3. 使用您设置的pthread_attr_t 调用pthread_create 以创建一个分离线程来运行一个函数,该函数将全局保存的argc 和argv 值传递给old_main 函数。
  4. 调用pthread_exit终止原线程。
  5. 新创建的线程继续使用所需大小的堆栈执行old_main。

【讨论】:

    【解决方案2】:

    假设 Windows 和 MSVC 作为编译器,您似乎正在寻找的是 /F compiler flag 或 /STACK linker flag。任何一个都会调整可执行文件主线程的堆栈大小。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-11-28
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 2014-04-14
        • 2013-09-27
        • 2022-01-19
        相关资源
        最近更新 更多