2011-08-10 8 views
26

मुझे यकीन नहीं है कि वहां कितने उपयोगकर्ता हैं जो एलसीसी सी कंपाइलर और विंडोज के लिए वेबिट जीयूआई का उपयोग करते हैं लेकिन इसमें एक "फीचर" है जो काफी परेशान हो सकती है। जब आप डीबगर के साथ एक एप्लिकेशन शुरू करते हैं, तो यह मुख्य फ़ंक्शन की शुरुआत में एप्लिकेशन को तोड़ देता है। मैं इसे कैसे बंद कर सकता हूं ताकि डीबगर तुरंत तब तक कोड निष्पादित कर लेता है जब तक कि मैं इसे रोकता हूं या यह एक ब्रेक पॉइंट हिट करता है जिसे मैंने बनाया है?एलसीसी - आवेदन की शुरुआत में तोड़ने से डीबगर को कैसे रोकें?

+0

अच्छा सवाल! मैंने सी को पढ़ाने के लिए अतीत में एलसीसी-विन 32 का उपयोग किया है, और नए लोगों के लिए यह एक अच्छी सुविधा है, लेकिन मैं देख सकता हूं कि यह परेशान कैसे हो सकता है। मैंने मुख्य() में शुरुआती ब्रेस पर ब्रेकपॉइंट को सेट और अनसेट करने का प्रयास किया लेकिन किसी भी तरह से यह वहां रुक गया। मैंने Wedit के कमांड लाइन पैरामीटर (एलसीसी-विन 32 के लिए आईडीई) को देखा लेकिन फ्लैग नहीं हैं जो स्टार्टअप पर क्या करता है इसे नियंत्रित करते हैं। –

+0

मैं एलसीसी से परिचित नहीं हूं, लेकिन उपयोगकर्ता दस्तावेज़ीकरण से - "आप अपने सभी ब्रेकपॉइंट्स देख सकते हैं और मेनू कंपाइलर-> ब्रेकपॉइंट्स (या डीबग-> ब्रेकपॉइंट्स संपादित करें) से चुनकर उन्हें संपादित/हटा सकते हैं। क्या आपने यहां मुख्य() पर ब्रेकपॉइंट देखा था? –

+0

कोई ब्रेकपॉइंट नहीं है। परेशानी इस बात पर ध्यान दिए बिना कि ब्रेकपॉइंट सेट किया गया है या नहीं, डीबगर/संपादक हमेशा मुख्य() विधि की पहली पंक्ति पर टूट जाता है। विंडबग और वीएस में – RLH

उत्तर

6

वाह, लोग अभी भी एलसीसी का उपयोग करते हैं ... पिछली बार मैंने इसका इस्तेमाल किया था ~ 10 साल पहले।

मैंने wedit.exe को संकुचित किया और पुष्टि कर सकते हैं कि इस व्यवहार को अक्षम करने का कोई आधिकारिक तरीका नहीं है।

यदि यह आपके लिए काम करता है तो मैंने बाइनरी को पैच किया। मैंने इसे here अपलोड किया।

उन लोगों के लिए जो वायरस के बारे में चिंतित हैं और इस तरह मैंने wedit को here से लिया है। बॉक्स के बारे में कहते हैं कि यह संस्करण 4.0 16 सितं, 2009

यहाँ पर संकलित है जो उन लोगों के रुचि के लिए समारोह समझौता किया गया है:

int __cdecl sub_44CF0D(HANDLE hProcess) 
{ 
    int result; // [email protected] 
    int v2; // [email protected] 
    int v3; // [email protected] 
    int v4; // [email protected] 
    int v5; // [email protected] 
    int v6; // [sp+10h] [bp-68h]@11 
    int v7; // [sp+14h] [bp-64h]@1 
    struct _DEBUG_EVENT DebugEvent; // [sp+18h] [bp-60h]@1 

    v7 = 1; 
    result = WaitForDebugEvent(&DebugEvent, dwMilliseconds); 
    if (result) 
    { 
    sub_44C67A(&DebugEvent); 
    if (DebugEvent.dwDebugEventCode == 1) 
    { 
     if (DebugEvent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_ACCESS_VIOLATION 
     && !(dword_482860 & 1) 
     && !dword_484328 
     && DebugEvent.u.Exception.dwFirstChance) 
     { 
     sub_44E1A5(0); 
     sub_44CEB2(v2); 
     return ContinueDebugEvent(DebugEvent.dwProcessId, DebugEvent.dwThreadId, 0x80010001u); 
     } 
     v6 = 0; 
     v7 = sub_44D2C4((int)&DebugEvent, hProcess, (int)&v6); 
     if (v6 && DebugEvent.u.Exception.dwFirstChance) 
     return ContinueDebugEvent(DebugEvent.dwProcessId, DebugEvent.dwThreadId, 0x80010001u); 
     goto LABEL_41; 
    } 
    if (DebugEvent.dwDebugEventCode == 3) 
    { 
     if (dword_483C94) 
     { 
     dword_48428C = 1; 
LABEL_41: 
     if (dword_483C6C) 
      sub_44ECDC(); 
     if (v7) 
     { 
      result = ContinueDebugEvent(DebugEvent.dwProcessId, DebugEvent.dwThreadId, 0x10002u); 
     } 
     else 
     { 
      dword_49BF68 = 1; 
      ResetEvent(dword_484AE4); 
      dword_4843C8 = DebugEvent.dwThreadId; 
      result = sub_4524CD(); 
     } 
     return result; 
     } 
     Sleep(0x32u); 
     dword_49BF64 = 1; 
     dword_49BF68 = 1; 
     qword_483C74 = __PAIR__(
         (unsigned int)DebugEvent.u.Exception.ExceptionRecord.ExceptionAddress, 
         DebugEvent.u.Exception.ExceptionRecord.ExceptionInformation[2]); 
     if (dword_484288) 
     ::hProcess = (HANDLE)DebugEvent.u.Exception.ExceptionRecord.ExceptionFlags; 
     else 
     ::hProcess = hProcess; 
     dword_483C84 = DebugEvent.dwProcessId; 
     hThread = DebugEvent.u.Exception.ExceptionRecord.ExceptionRecord; 
     dword_483C9C = (HANDLE)DebugEvent.u.Exception.ExceptionRecord.ExceptionCode; 
     dwThreadId = DebugEvent.dwThreadId; 
     dword_483C94 = 0; 
     if (sub_45A83A()) 
     { 
     v4 = sub_4026A6(28); 
     dword_484330 = v4; 
     *(_DWORD *)(v4 + 4) = hThread; 
     *(_DWORD *)(v4 + 8) = dwThreadId; 
     if (dword_484288) 
     { 
      sub_455B58(); 
     } 
     else 
     { 
      Sleep(0x64u); 
      v5 = sub_45AAFC(); 
      if (!v5) 
      return PostMessageA(dword_4849EC, 0x111u, 0x64u, 0); 
      if (dword_484354) 
      goto LABEL_50; 
      sub_455B58(); 
      if (dword_483C70 && *(_DWORD *)(dword_483C70 + 52)) 
      *(_DWORD *)(*(_DWORD *)(dword_483C70 + 52) + 36) = sub_451577(**(_DWORD **)(dword_483C70 + 52), 1u); 
      v5 = *(_DWORD *)(dword_483C70 + 52); 
      if (v5 && *(_DWORD *)(v5 + 36)) 
      { 
LABEL_50: 
      if (!dword_483C6C) 
       sub_44E92A(v5); 
      sub_44CC3D(); 
      sub_451600(); 
      PostMessageA(dword_4849EC, 0x111u, 0x154u, 0); 
      } 
      else 
      { 
      sub_4029CA("Imposible to find %s\nRunning without source display", *(_DWORD *)(dword_483C70 + 20)); 
      dword_484344 = 1; 
      v7 = 1; 
      PostMessageA(dword_4849EC, 0x111u, 0x154u, 0); 
      } 
     } 
     goto LABEL_41; 
     } 
     dword_484338 = 1; 
     v3 = sub_44DB56(qword_483C74); 
     if (v3) 
     *(_BYTE *)(v3 + 29) &= 0xFDu; 
     result = ContinueDebugEvent(DebugEvent.dwProcessId, DebugEvent.dwThreadId, 0x10002u); 
    } 
    else 
    { 
     if (DebugEvent.dwDebugEventCode != 5) 
     goto LABEL_41; 
     if (DebugEvent.dwProcessId != dword_483C84) 
     { 
     v7 = 1; 
     goto LABEL_41; 
     } 
     dword_49BF64 = 0; 
     dword_49BF68 = 1; 
     dword_481614 = 0; 
     result = sub_402A32(4520, SLOBYTE(DebugEvent.u.Exception.ExceptionRecord.ExceptionCode)); 
     if (!dword_483C6C) 
     result = sub_40B155(lpCmdLine); 
    } 
    } 
    else 
    { 
    if (dword_483C6C) 
     result = sub_44ECDC(); 
    } 
    return result; 
} 

ifLABEL_50 के तहत मैं क्या समझौता (0x75 से 0xEB करने के लिए) है।

जगह को स्थान देना आसान था क्योंकि मुझे WriteProcessMemory की उम्मीद थी कि इसे 0xCC लिखने के लिए इस्तेमाल किया जा रहा है, जो कि डिबग किया जा रहा है।

+1

ठीक है, मैं इसे जवाब के रूप में चिह्नित करने से पहले थोड़ी देर इंतजार करना चाहता था, बस कुछ अन्य समाधान स्वयं ही प्रदान किए जाने पर। यह निश्चित रूप से समस्या को हल करता है, जैसा कि मैंने आशा की थी उतनी सुंदरता के रूप में नहीं। समाधान के लिए धन्यवाद! – RLH

संबंधित मुद्दे