gpt4 book ai didi

c++ - OSX 64 位 C++ 逐行反汇编

转载 作者:行者123 更新时间:2023-11-28 03:22:39 25 4
gpt4 key购买 nike

我一直在阅读以下系列文章:http://www.altdevblogaday.com/2011/11/09/a-low-level-curriculum-for-c-and-c

显示的反汇编代码和我在运行相同代码时设法生成的反汇编代码差异很大,我缺乏解释差异的理解。

有没有人可以逐行检查它并解释它在每一步中的作用?我从我周围的搜索中得到感觉,前几行与帧指针有关,我的反汇编代码中似乎还有一些额外的行,以确保在将新值放入寄存器之前寄存器为空(不存在来自文章中的代码)

我正在使用 XCode 4 中的 g++ 编译器在 OSX(原作者使用的是 Windows)上运行它。我真的不知道天气与否,这些差异是由于操作系统、架构(32 位 vs 64 位)也许?)或编译器本身。它甚至可能是我猜的代码 - 我的代码包含在主函数声明中,而原始代码没有提到这一点。

我的代码:

int main(int argc, const char * argv[])
{

int x = 1;
int y = 2;
int z = 0;

z = x + y;

}

我的反汇编代码:

0x100000f40:  pushq  %rbp
0x100000f41: movq %rsp, %rbp
0x100000f44: movl $0, %eax
0x100000f49: movl %edi, -4(%rbp)
0x100000f4c: movq %rsi, -16(%rbp)
0x100000f50: movl $1, -20(%rbp)
0x100000f57: movl $2, -24(%rbp)
0x100000f5e: movl $0, -28(%rbp)
0x100000f65: movl -20(%rbp), %edi
0x100000f68: addl -24(%rbp), %edi
0x100000f6b: movl %edi, -28(%rbp)
0x100000f6e: popq %rbp
0x100000f6f: ret

原文的反汇编代码:

mov    dword ptr [ebp-8],1
mov dword ptr [ebp-14h],2
mov dword ptr [ebp-20h],0
mov eax, dword ptr [ebp-8]
add eax, dword ptr [ebp-14h]
mov dword ptr [ebp-20h],eax

完整的逐行 segmentation 将非常有启发性,但如果能帮助理解这一点,我们将不胜感激。

最佳答案

原始文章中的所有代码都在您的代码中,只是周围有一些额外的东西。这:

0x100000f50:  movl   $1, -20(%rbp)
0x100000f57: movl $2, -24(%rbp)
0x100000f5e: movl $0, -28(%rbp)
0x100000f65: movl -20(%rbp), %edi
0x100000f68: addl -24(%rbp), %edi
0x100000f6b: movl %edi, -28(%rbp)

直接对应文中讲到的6条指令。

关于c++ - OSX 64 位 C++ 逐行反汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com