Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.06;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
2-1246917522
бульдозер
2009-07-07 01:58
2009.09.06
штриховка замкнутых областей


2-1246790733
Neket
2009-07-05 14:45
2009.09.06
ЗАпук обработчика из другой Формы.


15-1246894995
Пит
2009-07-06 19:43
2009.09.06
AVG ругается на практически чистый проект Delphi


15-1246633939
Пит
2009-07-03 19:12
2009.09.06
Обработка CallStack и SEH-фреймов


2-1246861483
@!!ex
2009-07-06 10:24
2009.09.06
Как представить число в виде трех float чисел.