stack相关内容

GCC - 如何重新对齐堆栈?

我尝试构建一个使用 pthreads 和 __m128 SSE 类型的应用程序.根据 GCC 手册,默认堆栈对齐是 16 个字节.为了使用__m128,要求是16字节对齐. 我的目标 CPU 支持 SSE.我使用不支持运行时堆栈重新对齐的 GCC 编译器(例如 -mstackrealign).我不能使用任何其他 GCC 编译器版本. 我的测试应用程序如下所示: #include ..
发布时间:2022-01-22 12:30:57 其他开发

为什么我的编译器保留的空间比函数堆栈帧所需的空间多?

我有一个函数: void func(int a){整数 x = a+2;} 在汇编代码中,在函数prolog中: 推送 %ebp移动 %esp, %ebp低于 $0x10, %esp 代码只需要为 x 预留空间,即 4 个字节.但它保留了 16 个字节.这是为什么 ?我一直认为它会预留比所需更多的空间. 我的猜测:它倾向于以 16 个字节存储.即如果我需要说 20 个字节,无论如何它 ..
发布时间:2022-01-22 12:30:49 其他开发

为什么我会得到“找不到当前函数的边界"?当我覆盖易受攻击程序的 ret 地址时?

我想利用基于堆栈的缓冲区溢出来进行教育. 有一个典型的函数使用来自 main 的参数调用,该函数作为程序的输入提供给保存参数的本地缓冲区.给定一个 nops+shellcode+address_shellcode 的输入,我将利用它. 在使用 gdb 调试后,我找到了 shell 代码的地址,因为它将作为参数传递,并且在 strcpy 之后我检查了堆栈和 $ebp+8 已成功地被 sh ..
发布时间:2022-01-22 12:30:40 其他开发

对 C++ 动态内存分配的确切含义有点困惑

我听说过关于动态的确切含义的相互矛盾的事情,以及自动的内存分配.我听说堆栈被称为自动内存分配和动态内存分配.我可以看到两者,因为堆栈内存块大小是在程序执行之前确定的,因此它的最大大小在运行时不会增长.然而,在程序执行期间,随着函数数据被压入和弹出堆栈,堆栈会不断地增长和缩小. 那么从这个意义上说,这不是动态内存分配吗? 如果是,那么仅将堆称为动态的不是令人困惑吗? 有人可以帮我澄 ..
发布时间:2022-01-22 12:30:06 C/C++开发

从堆栈中弹出特定片段并删除其他片段

如何从堆栈中弹出特定片段并从片段中删除其他片段?例如,这些是我的片段,我知道我在 E 中. A-> B -> C -> D ->E 想从 E 回到 B 并清除 C 和 D.我该怎么做? 解决方案 你可以为每个fragment添加一个tag,同时将它们添加到backstack中,然后从backstack中popfragment,直到没有到达你想要的tag的fragment. F ..
发布时间:2022-01-22 12:29:56 移动开发

我将如何在 Java 中迭代堆栈

我想知道如何在 Stack 类中使用迭代器.如何为它创建一个迭代器类? 解决方案 只需通过 iterator(): 堆栈堆栈 = ...迭代器iter = stack.iterator();而(iter.hasNext()){System.out.println(iter.next());} 或者,如果您只想将它​​们全部打印出来,请使用 enhanced-for 循环: ..
发布时间:2022-01-22 12:29:39 Java开发

如何在 C++ 中创建一个位于堆而不是堆栈的数组?

我有一个非常大的数组,它的长度必须是 262144 个元素(将来可能会更大).我试过像这样在堆栈上分配数组: #define SIZE 262144int myArray[大小]; 但是,当我尝试添加超过某个点的元素时,当我尝试访问它们时,这些值似乎有所不同.我知道这是因为堆栈上只有有限数量的内存,而不是具有更多内存的堆. 我尝试了以下方法,但运气不佳(无法编译): #define S ..
发布时间:2022-01-22 12:29:29 C/C++开发

java.util.Stack 的迭代器中是否有错误?

今天我试图推入 java.util.Stack 类,然后使用 Iterator 对项目进行迭代(不使用 pop).我期待 LIFO 财产,但感到惊讶. 这是我正在尝试的代码. import java.util.*;导入 java.util.Stack;公共类主要{公共静态无效主要(字符串[]参数){RobStackrstack = new RobStack();//正确实现堆栈 ..
发布时间:2022-01-22 12:28:58 Java开发

如何获取基堆栈指针的地址

我正在将应用程序从 x86 移植到 x64.我正在使用 Visual Studio 2009;大部分代码是 C++,有些部分是纯 C.编译到 x64 时不支持 __asm 关键字,并且我们的应用程序包含一些内联汇编程序.我没有写这段代码,所以我不知道 et 应该做什么: int CallStackSize() {双字帧;PDWORD pFrame;__asm{mov EAX, EBPmov 帧, ..
发布时间:2022-01-22 12:28:50 其他开发

哪个将加载第一个静态变量或静态块?

我的一个朋友问我哪个会加载第一个静态变量或静态块. 我的答案指向静态变量. 所以他给了我两个方程,并说要区分它们 第一个方程 公共类一些{公共静态无效主(字符串参数 []){System.out.println(Some.x);}静止的 {System.out.println(Some.x);}静态整数 x=90;} O/P:0 90 第二个方程 公共类一些{公共 ..
发布时间:2022-01-22 12:28:31 Java开发

Java 使用的内存远多于使用 -Xmx 分配的内存

我正在编写一个项目(用 Java 编写),教授说我们不允许使用超过 200m 的类我使用 -Xmx50m 将堆栈内存限制为 50m(绝对确定),但根据顶部,它仍在使用 300m 我尝试运行 Eclipse 内存分析器,它只报告 26m 这可能都是堆栈上的内存吗?我很确定我永远不会超过大约 300 个方法调用深度(是的,这是一个递归 DFS 搜索),所以这意味着每个堆栈帧都在使用几乎是一 ..
发布时间:2022-01-22 12:28:25 Java开发

如何禁用“返回"某些活动?

我不希望用户能够返回到我的应用的启动画面.一种解决方案似乎是检查当前活动下方的活动是否是启动画面的实例,在这种情况下退出应用程序,如下面的代码所示.但是,我不知道如何检查堆栈中的先前活动是什么.有人可以帮忙吗?有没有其他方法可以禁用“返回"给定活动? @Override公共无效 onBackPressed() {if(){Intent exit_intent ..
发布时间:2022-01-22 12:27:50 移动开发

C++:堆栈的 push() 与 emplace()

试图了解 std::stack 使用 push() 或 emplace() 之间的区别. 我在想,如果我创建一个 std::stack,那么我会使用 push() 因为整数是原始类型并且有emplace() 没有什么可构造的. 但是,如果我正在创建 std::stack 那么我会选择 emplace() 因为 std::string是一个对象. 这是正确 ..
发布时间:2022-01-22 12:27:42 C/C++开发

Stack 类型不是通用的;它不能用参数 <Character> 参数化.

我正在尝试编写一个简单的程序来使用堆栈.它给了我错误 Stack 类型不是通用的;它不能用参数参数化 import java.util.*;公共类堆栈{公共静态无效主要(字符串 [] 参数){堆栈堆栈=新堆栈();s.push("你好");System.out.println(s);}} 解决方案 你的类 Stack 正在遮蔽 java.util.Stack.您可以重命 ..
发布时间:2022-01-22 12:27:32 Java开发

反转句子中每个单词中的字符 - Thinbug

这段代码在 main 函数中: 扫描仪输入 = new Scanner(System.in);System.out.println("输入一个句子");字符串句子 = input.next();堆栈stk = 新堆栈();诠释 i = 0;while (i 这是 empty() 函数: public void empty(){while (this.first != nul ..
发布时间:2022-01-22 12:27:10 Java开发

清理堆栈并退出应用程序 onBackPressed()

基本上,我的应用程序有一个 loginScreen,一旦登录,您就可以进行许多活动.当我按下主页按钮时,应用程序进入后台,如果用户在一定时间内没有打开它,则用户会话关闭,你返回登录屏幕.现在的问题是,如果我想在会话过期后从 loginScreen 关闭应用程序,我按返回键,它应该关闭,但它没有.它把我带到堆栈中的前一个元素. 有线的事情是,在所有 onBackPressed() 方法上,当我 ..
发布时间:2022-01-22 12:27:02 移动开发

堆栈增长如何在 Windows 和 linux 上工作?

我刚刚读到 Windows 程序在函数入口调用 _alloca 来增加堆栈,如果它们需要超过 4k 的堆栈.我猜想每次访问保护页面时,windows 都会为堆栈分配一个新页面,因此 _alloca 以 4k 步访问堆栈以分配空间. 我还读到这仅适用于 Windows.如果linux(或其他ose)不需要_alloca,他们如何解决这个问题? 解决方案 Linux 依赖于一个高度优化的 ..
发布时间:2022-01-22 12:26:40 服务器开发