Главная страница
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.015 c
15-1246725022
KilkennyCat
2009-07-04 20:30
2009.09.06
Линукс. Скрипт удаления файла.


3-1227015324
миникодер
2008-11-18 16:35
2009.09.06
Запись BLOB из Delphi в Oracle 9.2


15-1246622084
Пит
2009-07-03 15:54
2009.09.06
Запись времени в логе


3-1227087393
kulinar
2008-11-19 12:36
2009.09.06
соединения Delphi c БД Oracle


15-1246948249
Kolan
2009-07-07 10:30
2009.09.06
Помогите найти исо-стандарт про иконки