问题标签 [multiplestacks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
1083 浏览

c++ - 在 C++ 中切换堆栈

我有一些用C语言编写的16位旧代码,使用Borland C++在多个堆栈之间切换,使用longjmps。它通过执行 malloc 创建一个新堆栈,然后使用 inline Assembler 将 SS 和 SP 寄存器设置为 malloc 区域地址的段和偏移量。我想将它转换为 Win32,看起来这两条指令应该被一个设置 ESP 的指令替换。这两条指令被 CLI/STI 对包围,但在 Win32 中,它们提供“特权指令”,所以我现在将它们删掉了。当谈到 Windows 时,我是一个真正的无辜者,所以,我的第一个测试用例成功了,我感到相当惊讶!所以,我相当模糊的问题是在这里问专家我正在做的事情是否a)太危险而无法继续,或者b)如果我添加一些代码会起作用,采取某些预防措施等?如果是后者,应该添加什么,我在哪里可以找到它?我是否需要担心任何其他寄存器,例如 SS、EBX 等?我在用没有优化...感谢人们可以给我的任何提示。

0 投票
1 回答
572 浏览

gdb - 在 gdb 6.3 中的多个堆栈之间切换

程序中有两个堆栈:一个是由操作系统创建的,第二个是由程序本身创建的,用于运行一些代码。

当程序在第二个堆栈崩溃时,我想切换到 gdb 中的主堆栈并查看回溯。可能吗?

我试图将 rsp 保存到一个变量并在崩溃后对其进行更改,但结果回溯不正确。我认为 gdb 无法区分堆栈中的帧。