【发布时间】:2020-05-18 10:41:06
【问题描述】:
我有一些 C 代码,当提供给 Compiler Explorer 时,它会输出:
mov BYTE PTR [rbp-4], al
mov eax, ecx
mov BYTE PTR [rbp-8], al
mov eax, edx
mov BYTE PTR [rbp-12], al
但是,如果我使用 GCC 或 G++,那么它会给我这个:
mov BYTE PTR 16[rbp], al
mov eax, edx
mov BYTE PTR 24[rbp], al
mov eax, ecx
mov BYTE PTR 32[rbp], al
我不知道为什么 BYTE PTR 不同。他们的地址完全错误,我不明白为什么他们在 [rdp] 部分之前。
如果您知道如何使用 gcc 或 g++ 重现第一个输出,请帮助!
【问题讨论】:
-
你的 gcc 版本是多少?请注意,偏移量可能仍然正确,具体取决于 rbp 之前的设置方式。还有可用的红色区域。
-
gcc.exe (GCC) 8.2.0
-
那是窗户。代码会有所不同,特别是因为 windows 不 有红色区域。
-
我正在尝试用它来写一个qemu内核所以...
-
然后由您决定要遵循哪个 ABI。此外,您可能希望启用优化。