stack相关内容

“调用堆栈"和“调用堆栈"之间的区别和“线程堆栈"

在 Java 多线程中,call stack 和 thread stack 这两个术语在语义上有区别吗? 解决方案 每个线程都有自己的调用栈,“调用栈"和“线程堆栈"是一回事.称其为“线程堆栈".只是强调调用堆栈是特定于线程的. Bill Venners 将此称为 Java 堆栈: 当一个新线程启动时,Java 虚拟机会为该线程创建一个新的 Java 堆栈.如前所述,Java ..
发布时间:2022-01-22 12:47:40 Java开发

C# &.NET:堆栈分配

我对 stackalloc 运算符的功能有一些疑问. 它实际上是如何分配的?我认为它的作用类似于: void* stackalloc(int sizeInBytes){void* p = StackPointer (esp);StackPointer += sizeInBytes;如果(堆栈指针超出堆栈大小)抛出新的 StackOverflowException(...);返回 p;} ..
发布时间:2022-01-22 12:47:30 C#/.NET

理解一个简单的C程序生成的汇编代码

我试图通过使用 gdb 的反汇编程序检查一个简单的 C 程序的汇编级代码. 以下是C代码: #include 无效函数(int a,int b,int c){字符缓冲区1[5];字符缓冲区2[10];}无效的主要(){函数(1,2,3);} 以下是 main 和 function 的反汇编代码 gdb) disass main函数 main 的汇编代码转储:0x08 ..
发布时间:2022-01-22 12:47:23 服务器开发

保存和恢复陷阱状态?管理多个陷阱处理程序的简单方法?

什么是覆盖 bash 陷阱处理程序的好方法,这些处理程序不会永久践踏可能已经设置或尚未设置的现有处理程序?动态管理任意的陷阱例程链怎么样? 有没有办法保存陷阱处理程序的当前状态,以便以后恢复它们? 解决方案 在 Bash 中保存和恢复 Trap Handler 状态 我将提交以下堆栈实现来跟踪和恢复陷阱状态.使用这种方法,我可以推送陷阱更改,然后在完成后将它们弹出.这也可以用于 ..
发布时间:2022-01-22 12:47:17 其他开发

内核栈和用户栈有什么区别?

在同一个程序中使用两个不同的堆栈有什么需要?Trap 如何将当前程序栈从用户栈变为内核栈?完成系统调用后如何返回用户栈? 每个进程都有内核和用户栈吗? 解决方案 (基本上)有一个“内核栈".每个 CPU.存在一个“用户堆栈".对于每个进程,尽管每个线程都有自己的堆栈,包括用户线程和内核线程. “陷阱如何改变堆栈"其实很简单. CPU 因中断而改变进程或“模式".中断的发生 ..
发布时间:2022-01-22 12:47:01 其他开发

如何实现“无堆栈"?解释语言?

我正在制作我自己的类似 Lisp 的解释语言,并且我想做尾调用优化.我想将我的解释器从 C 堆栈中解放出来,这样我就可以管理我自己从函数到函数的跳转以及我自己的堆栈魔法来实现 TCO.(我真的不是说堆栈本身,只是调用不会将帧添加到 C 堆栈的事实.我想使用我自己的堆栈,它不会随着尾调用而增长).像 Stackless Python 一样,不像 Ruby 或……我猜是标准 Python. 但是 ..
发布时间:2022-01-22 12:46:55 其他开发

NOP 雪橇如何工作?

我找不到可以回答这个问题的好消息来源.我知道 nop sled 是一种用于在缓冲区溢出攻击中规避堆栈随机化的技术,但我无法理解它是如何工作的. 有什么简单的例子来说明这种方法? 128 字节 nop sled 之类的术语是什么意思? 解决方案 一些攻击包括使程序跳转到特定地址并从那里继续运行.注入的代码必须事先以某种方式加载到该确切位置. 堆栈随机化和其他运行时差异可能使 ..
发布时间:2022-01-22 12:46:35 其他开发

如何用一个数组实现 3 个堆栈?

有时,我会遇到以下面试问题:如何用一个数组实现 3 个堆栈?当然,任何静态分配都不是解决方案. 解决方案 空间(而非时间)高效.你可以: 1) 定义两个堆栈,从数组端点开始并沿相反方向增长. 2) 将第三个堆栈定义为从中间开始并沿您想要的任何方向增长. 3) 重新定义 Push 操作,这样当操作要覆盖其他堆栈时,在 Pushing 之前将整个中间堆栈向相反方向移动. ..
发布时间:2022-01-22 12:46:18 其他开发

堆栈溢出 C++

所以我,试图解决一个任务.a 已经有代码,但系统输出,“堆栈溢出"我是 C++ 新手,我的英语不好,所以我很抱歉造成误解 =) #include 使用命名空间标准;诠释主要(){诠释n;诠释 x;诠释 k = 0;//счетчик для рабочего массива整数 [200000];scanf("%d\n",&n);for (int i = 0; i 0){k ..
发布时间:2022-01-22 12:46:08 C/C++开发

从 pop 函数返回错误的地址

在解决了我的结构的其他问题后,我的推送按预期工作,但是我的弹出返回错误的地址,我不知道为什么 - QNode* const Q_Pop(Q* const pointerQ){...//空检查QNode* tempNode = 指针Q->front.next;指针Q->front.next = (tempNode->next);tempNode->next->prev = &(pointerQ-> ..
发布时间:2022-01-22 12:45:12 其他开发

memcpy 溢出边界漏洞利用?(粉碎堆栈)

我试图弄清楚这是否会以某种方式溢出: void print_address(char *p){arp_硬件;诠释我;hw.length = (大小) *(p + _OFFSET1);//189 + 4 = 193memcpy(hw.addr, 数据包 + _OFFSET2, hw.length);返回;} 其中数据包是从 .txt 文件读取的输入? 解决方案 hwaddr.len 是一 ..
发布时间:2022-01-22 12:45:01 其他开发

C#检查表达式是否有效

表达式: "(a[i]+{-1}*(8-9))" 应该返回 true,因为这样编写语法是有效的.每个左括号都有一个正确的位置,并且所有括号都在合法位置. 我试图通过一个堆栈来做到这一点,我知道我错在哪里,但我想知道一种相关的方法来解决这个问题.谢谢! 我可怜可怜的错误代码: 字符串表达式 = "( a[i]+{-1}*(8-9) ) ";堆栈expStack = ..
发布时间:2022-01-22 12:44:49 C#/.NET

括号检查器代码的测试用例不正确.对于'(()'输出应该是'不平衡'但我得到'平衡'

给定一个表达式字符串 exp.检查 “{“,"}","(“,")","[“,"]" 在 exp 中的对和顺序是否正确.例如,程序应该为 exp = “[()]{}{[()()]()}" 和 ' 打印 'balanced'不平衡' for exp = “[(])" 输入 输入的第一行包含一个整数 T,表示测试用例的数量.每个测试用例都由一个表达式字符串组成,单独一行. 输出 ..
发布时间:2022-01-22 12:44:42 C/C++开发

std::cout 语句评估顺序

pop() 函数有什么问题为什么不能正常工作? 类栈{int *p,*光标;整数大小;上市:stack(int sz) {Cursor = p = new int[size=sz+1];}//当栈大小为1时认为栈为空~stack() {delete[] p;}//Cursor 和 P 会在程序结束时被销毁无效推(int x){光标+=1;*光标=x;大小++;}int pop() {if(Cur ..
发布时间:2022-01-22 12:44:32 C/C++开发