我写了一个简单的 C++ 代码并在 VS 2013 中编译它。我试图了解返回 0 后会发生什么。
int main(){
...
return 0;
...
}
return 0 的汇编代码,转换为 xor eax, eax
011F1B19 xor eax,eax
}
011F1B1B pop ebp
011F1B1C ret
ret后跳转到011F121A
011F1203 push dword ptr ds:[11F3034h]
011F1209 push dword ptr ds:[11F3030h]
011F120F push dword ptr ds:[11F302Ch]
011F1215 call main (011F1B00h)
011F121A add esp,0Ch
011F121D mov dword ptr ds:[011F3024h],eax
011F1222 cmp dword ptr ds:[11F3028h],0
011F1229 jne __tmainCRTStartup+144h (011F1261h)
#ifndef _CRT_APP
exit(mainret);
011F122B push eax
011F122C call dword ptr ds:[11F2078h]
我有两个问题:
为什么返回转换为 xor eax, eax?
为什么函数在 011F121D 和 011F1222 和 011F122C 的 ds 段中取消引用 ptr?