En utilisant WinDBG pour déboguer le code d'assembly d'un exécutable, il semble que le compilateur insère d'autres codes entre deux instructions séquentielles. Les déclarations sont assez simples, par ex. ils ne fonctionnent pas avec des objets complexes pour les appels de fonction;Code de désassemblage de Visual Studio
int a, b;
char c;
long l;
a = 0; // @@
b = a + 1; // %%
c = 1; // ##
l = 1000000;
l = l + 1;
Et le démontage est
@@ 008a1725 c745f800000000 mov dword ptr [ebp-8],0
008a172c 80bd0bffffff00 cmp byte ptr [ebp-0F5h],0 ss:002b:0135f71f=00
008a1733 750d jne test!main+0x42 (008a1742)
008a1735 687c178a00 push offset test!main+0x7c (008a177c)
008a173a e893f9ffff call test!ILT+205(__RTC_UninitUse) (008a10d2)
008a173f 83c404 add esp,4
008a1742 8b45ec mov eax,dword ptr [ebp-14h]
%% 008a1745 83c001 add eax,1
008a1748 c6850bffffff01 mov byte ptr [ebp-0F5h],1
008a174f 8945ec mov dword ptr [ebp-14h],eax
## 008a1752 c645e301 mov byte ptr [ebp-1Dh],1
S'il vous plaît noter que @@
, %%
et ##
dans la liste désassemblage afficher les lignes C++ correspondantes.
Alors qu'est-ce que call
, cmp
, jne
et push
?