Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];

Вниз

CallStack vs обработчики событий   Найти похожие ветки 

 
Пит   (2009-07-07 17:37) [0]

Почему анализаторы CallStack (например, из JCL) не видят "заходы" в обработчики событий (event)? Конструкции аля:

if Assigned(FNotify) then FNotify(param) ;

реализуются через комманды call / ret, вроде как все должно быть нормально... Ан нет. Никто не в курсе?


 
Пит   (2009-07-08 10:48) [1]

вопрос может сформулирован непонятно?


 
oxffff ©   (2009-07-08 11:01) [2]


> Пит   (08.07.09 10:48) [1]


Да понятно он сформулирован.
Я не видел JCL.
Как они трейсят?
По Stack Frame?
Посмотри включен ли он у тебя.


 
Пит   (2009-07-08 13:06) [3]


> По Stack Frame?

вроде как да.


 
Пит   (2009-07-08 13:10) [4]

Кажется, я понял... Не в событиях дело, просто у событий зачастую отсутствуют локальные параметры, а при отсутствии локальных параметров дельфя не формирует стек-фрейм (по-умолчанию $w-), а точнее не использует конструкции:

push ebp;
mov ebp, esp;

В виду ненужности использования ebp...


 
Пит   (2009-07-08 13:11) [5]

oxffff, а как еще можно трейсить? Упоминают некий RAW метод, который вроде позволяет обойти ориентировку на стек-фреймы. Не пояснишь, в чем сам принцип поиска?


 
Пит   (2009-07-08 13:17) [6]

И еще, если уж такая пьянка пошла, интересна пара вопросов по формируемому дельфей MAP-файлу.

1) что такое 0001 и 0002 в адресах, допустим:

0001:000030D8       @LStrCat
...
0002:00002B54       DockSiteList

2) почему в MAP-файле отсутствует разлиновка по строчкам (Line numbers for ...) для встроенных модулей дельфи?

То есть, в простеньком проекте:

- Line numbers for Unit1(Unit1.pas) segment .text
...

- Line numbers for Project1(C:\Users\Mig\Desktop\CallStack_example\Project1.dpr) segment .text
...

Где разлиновка других модулей, хотя бы Forms? Ведь DCU должны быть, линковщик почему не строит для них соответствия?


 
oxffff ©   (2009-07-08 13:42) [7]

> Пит  

Я не знаю что такое RAW режим.

Но чисто технически возможно IMHO

1. например отлавливать вызов compiler magic функций например для addref при входе в процедуру и releaseref при выходе из нее для управляемых типов(dynArray;variants,string,record with managed types...). Понятно что для целочисленных процедур такое не сработает, но как вариант.
2. Формировать исключения и смотреть адрес обработчика.
3. Эмулировать исполнение.

Что касаемо map файла я с ним не сталкивался.


 
Пит   (2009-07-08 13:42) [8]

ах, ну и для полного загруза )))

Может подскажешь, до какого момента имеет смысл раскручивать стек? ESP указывает на вершину, а где начало? Я бегаю по стеку, но до какого момента это нужно делать.

Я думаю, уж точно не дальше начала надо раскручивать, но как узнать начало стека? А на самом деле теряется смысл раскрутки уже когда указатели ведут в стандартные модули винды. Как элегантно настроить остановку раскрутки?


 
Пит   (2009-07-09 11:08) [9]

эх, перевелись системщики на земле русской )))



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1246969271
Алексей111
2009-07-07 16:21
2009.09.06
Table is read only


15-1246616362
hinst
2009-07-03 14:19
2009.09.06
преобразование assembler в pascal


2-1246683083
shamans
2009-07-04 08:51
2009.09.06
Как получить бит числа?


15-1246653405
Knight
2009-07-04 00:36
2009.09.06
Downloader-ы...


2-1246784572
Neket
2009-07-05 13:02
2009.09.06
Как преобразовать string в PAnsiChar.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский