2017-10-09 341 views
0

使用WinDBG調試可執行文件的彙編代碼,似乎編譯器會在兩個連續語句之間插入一些其他代碼。這些陳述非常簡單,例如它們不適用於函數調用的複雜對象;來自visual studio的反彙編代碼

int a, b; 
char c; 
long l; 
a = 0;   // @@ 
b = a + 1;  // %% 
c = 1;   // ## 
l = 1000000; 
l = l + 1; 

而且拆裝

@@ 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 

請注意:@@%%##在反彙編列表中顯示相應的C++線。

那麼什麼是call,cmp,jnepush

enter image description here

回答

1

這是編譯器運行時錯誤檢查(RTC),未初始化變量的RTC開關檢查,我認爲你可以從Visual Studio(編譯器選項)對其進行管理。請致電this。部分/RTCu switch