Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
15-1246132859
@!!ex
2009-06-28 00:00
2009.09.06
Все... теперь я точно хакер.


15-1246640964
Тимохов_
2009-07-03 21:09
2009.09.06
Как узнать позицию каретки в TEdit?


15-1247145135
Palladin
2009-07-09 17:12
2009.09.06
Вопросы вида "Когда будет сделано?"


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


15-1247053069
Дуб
2009-07-08 15:37
2009.09.06
О чем собственно говорит иностранец?




   Наверх