Obe*_*ant -2 c assembly gcc gdb disassembly
我正在研究以下 C 代码片段:
char x = 'a';
int y = 5;
Run Code Online (Sandbox Code Playgroud)
运行 gdb 后,我遇到以下程序集:
mov BYTE PTR [ebp-1], 0x61
mov DWORD PTR [ebp-8], 0x5
Run Code Online (Sandbox Code Playgroud)
为什么ebp减少了 7 而不是 4?如果我更换char x = 'a'用int x = 2,我没有看到这种行为。
在您的 C 实现中,int对象必须存储在四的倍数的地址,通常是由于硬件对齐要求或功能。已知 EBP 寄存器中的地址是 4 的倍数(可能是 16 的倍数,具体取决于您的 C 实现)。所以[ebp-5]不会是多个四个字节,也不会[ebp-6]或[ebp-7]。编译器必须转到[ebp-8]下一个四的倍数。
( [ebp-2], [ebp-3], 和[ebp-4]不被考虑,因为int在这些地址中的任何一个开始一个四字节会重叠[ebp-1]用于char.)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |