Как получить call-stack ?

Тема в разделе "WASM.WIN32", создана пользователем tylerdurden, 26 сен 2006.

  1. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    В любом отладчике есть ф-я которая показывает вложенность вызовов процедур до текущей позиции (к примеру break point). Причем он это явно не трейсит... Так вот вопрос собсно каким образом действует stack-backtracing (читал вроде что использует сохраненные ebp для "отлова" stack frames, но как ?)... Гугл сует только сцылки на gdb
     
  2. SmikeX

    SmikeX New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2003
    Сообщения:
    20
    попробуй функции
    StackWalk, StackWalk64
    от dbghelp.dll

    сам не пользовал, но хотелось бы,
    если попробуешь, был бы благодарен услышать результат
     
  3. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    tylerdurden

    Call Stack можно получить следующим образом:

    Код (Text):
    1.  __declspec(naked) Get_EBP(void)
    2. {
    3.     __asm
    4.     {
    5.         mov eax, ebp
    6.         ret
    7.     };
    8. }
    9.  
    10. CollectFrames(ULONG CountStackFrames)
    11.  {
    12.     ULONG ReturnAddress;
    13.     ULONG Frame;
    14.     ULONG i;
    15.  
    16.      Frame = Get_EBP();
    17.  
    18.      for(i=0; i<CountStackFrames; i++)
    19.      {
    20.          ReturnAddress = *(ULONG *)(Frame + sizeof(ULONG));
    21.  
    22.          Frame = *(ULONG *) Frame;
    23.      }
    24.  }
     
  4. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    яркий пример использования debug api -
    http://www.codeproject.com/tools/visualleakdetector.asp
     
  5. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Дело в том что StalkWalk выдает полную хрень
     
  6. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Iceberg
    Пасибо... Как это я сам не допер...