小编Cat*_*des的帖子

'push ebp''pop ebp'未使用,但在删除时仍会破坏代码.

我编译:

"
int x_add(int a, int b)
{
    return a+b;
}
"
Run Code Online (Sandbox Code Playgroud)

得到了

"
push ebp
mov ebp,esp
mov edx,[ebp+08]
mov eax,[ebp+0c]
pop ebp
ret
"
Run Code Online (Sandbox Code Playgroud)

我将组件简化为

"
mov eax,[esp+0c]
add eax,[esp+08]
ret
"
Run Code Online (Sandbox Code Playgroud)

当我运行"x_add(1, 1);"它返回-1所以我替换代码试图找出什么破坏.

"
push ebp
mov eax,[esp+0c]
add eax,[esp+08]
pop ebp
ret
"
Run Code Online (Sandbox Code Playgroud)

按预期工作,返回1 + 1 = 2.那么为什么ebp必须在开始时被推送然后如果从未在代码中使用过那么会弹出?

x86 assembly arguments

1
推荐指数
1
解决办法
171
查看次数

标签 统计

arguments ×1

assembly ×1

x86 ×1