需要帮助理解C函数中的ASM代码

时间:2015-12-22 10:07:36

标签: c assembly

在一个函数中,我们有以下内容:

__asm__("movl $0xe4ffffe4, -4(%ebp)");

这是否意味着我们将内存地址0xe4ffffe4的内容移到ebp寄存器上?

3 个答案:

答案 0 :(得分:5)

此:

movl $0xe4ffffe4, -4(%ebp)

表示"将4字节值0xe4ffffe4移动到存储在寄存器ebp中的地址之前4个字节的插槽中。"

答案 1 :(得分:4)

-4(%ebp)表示:存储在ebp中的地址前4个字节。这个地址通常是第一个局部变量。 movl的l前缀代表" long",对于整数,这意味着4个字节。所以你的代码意味着:"在第一个局部变量中移动值0xE4FFFFE4,该变量的大小为4字节"。

答案 2 :(得分:0)

看一下这个文件。它是通过在ebp中放置一个常量值(canary),运行一些代码,然后验证常量仍然存在以检测恶意行为来保护调用堆栈。 http://www.coresecurity.com/files/attachments/StackGuard.pdf