- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 x86 架构中的函数调用期间,是否存在返回地址未压入堆栈的情况?
最佳答案
号CALL
根据定义,将在跳转到目标地址之前将返回地址压入堆栈。那个返回地址是 EIP
(或 RIP
)+ sizeof(call instruction)
(通常为 5 个字节。)
Volume 2 of the Intel® 64 and IA-32 Architectures Software Developer’s Manual声明 CALL
:
Saves procedure linking information on the stack and branches to the called procedure specified using the target operand.
JMP
.
CALL
在 x86 上实现函数调用。指令,有一个异常(exception):
tail call ,这可以通过
JMP
实现.这种情况尤其发生在一个函数返回另一个函数调用的结果时。例如。
int bar(int a, int b);
int foo(int a, int b)
{
if (a < b)
return 0;
return bar(a, b); // Will probably be: jmp bar
}
关于assembly - CALL 指令是否总是将 EIP 指向的地址压入堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33685146/
我的程序在 Windows Vista Ultimate 和 Windows 7 上运行完美,但在 Windows XP 上运行失败。 首先,我的应用程序创建一个系统文件进程,它调用 GetThrea
我正在尝试利用该程序中的缓冲区溢出我使用的是 32 位 kali_linux #include void win() { printf("code flow successfully changed
我想编写一个易受攻击的程序,以更好地理解 c# 中的 Stack Overflow(原因),也用于教育目的。基本上,我“只是”想要一个堆栈溢出,覆盖 EIP,所以我可以控制它并可以指向我自己的代码。我
嗨,我真的陷入了这个问题:这是我的代码,下面是我尝试溢出的代码: #include #define B 145 // 141 for ex overflow #define A 0 char sc[
在Spring Integration我需要按顺序将消息发送到子流 A(它将消息存储到数据库中),然后再发送到子流 B(它使用一些数据库查找)。整个 A 和 B 执行应该在一个事务的边界内执行。 最初
我正试图通过更改它的 EIP 来破解另一个程序。有两个程序在运行,一个是目标,它告诉函数“核心函数”(例如,接收密码字符串作为参数并返回 true 或 false 的函数)在内存中的位置。然后现在我知
eip 寄存器是 32 位,每条新指令都会递增。那么当它达到 32 位数字的最大值时会发生什么:4294967295。 最佳答案 通常,您不会让它发生。 %eip 不会无条件递增;它受流控制指令(如
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: use callback function to report stack backtrace 给定一个 void
我最近一直在编写一些内核模块。对于某些模块,每次插入或删除它们时,屏幕上都会显示巨大的内核跟踪。错误有点像 ERROR: Bad EIP value. 或 ModuleName is tainted
我有一个 Camel 路由,它从队列中取出一条消息,将它发送到一个 bean 进行处理,然后将消息排回另一个队列。 我正在尝试消除第二个队列中的“重复消息”。 Camel 是否有任何端点、处理器、EI
我正在尝试解决缓冲区溢出问题。我不明白这里的 eip 值是怎么回事。 这是 C 代码: void copy(char *arg) { char msg[256]; strcpy(msg,arg
这个问题看起来像是一个肮脏的 hack,你不应该这样做,但让我先解释一下。最终目标是像 C++ 中那样拥有方法局部静态。 void Func() { static methodLocalObje
我在 ubuntu 12.04 和 64 位机器上工作。我在读一本关于缓冲区溢出的好书,在玩一个例子时发现了一个奇怪的时刻。 我有这个非常简单的 C 代码: void getInput (void)
在 x86 架构中的函数调用期间,是否存在返回地址未压入堆栈的情况? 最佳答案 号CALL根据定义,将在跳转到目标地址之前将返回地址压入堆栈。那个返回地址是 EIP (或 RIP)+ sizeof(c
我有一个 CloudFormation 模板,它为 RStudio Server 启动了一个 EC2 实例。 AWSTemplateFormatVersion: 2010-09-09 Descript
在处理一些 x86 asm 时,我想知道错误导致 EIP 被设置为 00000000 或另一个不存在的内存位置的情况。是否可以使用 SEH 或类似的错误处理机制捕获这些情况并恢复执行? (假设堆栈、堆
对于计算机体系结构和处理器/内存级别发生的低级内容,我完全是新手。我首先要说的是。我对计算机所做的工作几乎一直处于高级编程水平。 C++、Java等话虽这么说,我目前正在读一本开始深入研究低级编程内容
我(也许过于简单)对 EJB3 的理解是,它是一种将 POJO 转变为符合 Java EE 的业务逻辑单元的方法。它是可重用的,可以“插入”到跨越多个项目的不同后端架构。这是朝着真正的组件驱动架构方向
我正在尝试开发运行时堆栈跟踪器。我有一个函数,只要被跟踪的程序出现段错误,它就会返回 EIP 地址。我怎样才能回到当前函数的 ebp(被观察程序崩溃的那个函数),以便我可以开始跟踪? 最佳答案 无法将
我正在使用 Apache Camel 2.15 并发现了一个有趣的行为。我将通过 REST API 调用接收到的数据放入作为直接端点的 Camel 路由中。该路由又使用拆分的 EIP 并调用另一个也是
我是一名优秀的程序员,十分优秀!