在一个函数中,我们有以下内容:
__asm__("movl $0xe4ffffe4, -4(%ebp)");
这是否意味着我们将内存地址0xe4ffffe4的内容移到ebp寄存器上?
答案 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