编译器差异与实现解析
1. 不同编译器的 switch 语句对比
在这个示例中,我们比较了由两个不同编译器为相同代码生成的32位x86二进制文件中 switch 语句的相关组件。
1.1 gcc编译器生成的代码
以下是gcc编译器生成的与 switch 语句相关的代码:
0001075a CMP dword ptr [EBP + value],12
0001075e JA switchD_00010771::caseD_0v
00010764 MOV EAX,dword ptr [EBP + a]
00010767 SHL EAX,0x2
0001076a ADD EAX,switchD_00010771::switchdataD_00010ee0 = 00010805
0001076f MOV EAX,dword ptr [EAX]=>->switchD_00010771::caseD_0 = 00010805
switchD_00010771::switchD
00010771 JMP EAX
switchD_00010771::caseD_1 XREF[2]: 00010771(j), 00010ee4(*)
00010773 MOV EDX,dword ptr [EBP + a]
00010776 MOV EAX,dword ptr
超级会员免费看
订阅专栏 解锁全文
86

被折叠的 条评论
为什么被折叠?



