2017-10-09 14 views
0

実行ファイルのアセンブリコードをデバッグするためにWinDBGを使用すると、コンパイラは2つの連続した文の間に他のコードを挿入するようです。ステートメントはかなり単純です。関数呼び出しのために複雑なオブジェクトでは動作しません。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,jneおよびpush

enter image description here

答えて

1

それは(RTC)をチェックコンパイラ、ランタイムエラー、初期化されていない変数のためのRTCスイッチの確認ですが、私は、Visual Studioの(コンパイラオプション)からそれを管理することができると思います。

詳細については、thisをご覧ください。セクション/RTCu switch

関連する問題