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

Вниз

Крах приложения внутри FinalizeUnits   Найти похожие ветки 

 
Landon ©   (2015-09-03 15:00) [0]

Имеется Delphi 7, при завершении приложения в модуле System.pas происходит AV на этом коде:

procedure FinalizeUnits;
var
 Count: Integer;
 Table: PUnitEntryTable;
 P: Pointer;
begin
 if InitContext.InitTable = nil then
   exit;
 Count := InitContext.InitCount;
 Table := InitContext.InitTable^.UnitInfo;
{$IFDEF LINUX}
 Inc(Cardinal(Table), InitContext.Module^.GOT);
{$ENDIF}
 try
   while Count > 0 do
   begin
     Dec(Count);
     InitContext.InitCount := Count;
     P := Table^[Count].FInit;
...


В ассемблере:

system.pas.10687: procedure FinalizeUnits;
00404555  8B5E0C      mov ebx,[esi+$0c]
system.pas.10688: var
00404558  8B4004      mov eax,[eax+$04]
0040455B  8945FC      mov [ebp-$04], eax
system.pas.10692: begin
0040455E  33C0         xor eax, eax
00404560  55            push ebp
00404561  6895454000      push $00404595
00404566  64FF30      push dword ptr fs:[eax]
00404569  648920      mov fs:[eax], esp
system.pas.10693:  if InitContext.InitTable = nil then
0040456C  85DB         test ebx,ebx
0040456E  7E1B          jle +$1b
system.pas.10695: Count := InitContext.InitCount;
00404570  4B             dec ebx
system.pas.10696:  Table := InitContext.InitTable^.UnitInfo;
00404571  895E0C      mov [esi+$0c], ebx
system.pas.10697:  {$IFDEF LINUX}
00404574  8B45FC       mov eax,[ebp-$04]               <-- !!!!  ЗДЕСЬ ПАДАЕТ
00404577  8B44D804    mov eax,[eax+ebx*8+$04]
0040457B  8945F8       mov [ebp-$08],eax
system.pas.10698: Inc(Cardinal(Table), InitContext.Module^.GOT);
....

Падает на строчке:

mov eax,[ebp-$04]  - потому что ebp при этом равен нулю.

Но почему так и что делать - не понимаю, мало знаний в асемблере :(


 
Германн ©   (2015-09-03 16:37) [1]

Как же ты умудрился влезть внутрь  {$IFDEF LINUX} ?
На Kylix пишешь?


 
Игорь Шевченко ©   (2015-09-03 17:39) [2]

Memproof может помочь


 
Landon ©   (2015-09-04 11:30) [3]


> На Kylix пишешь?

нет, Delphi 7 на Win7

Мне кажется это баг CPU Window какой-то, в реальности mov eax,[ebp-$04] относится, наверное, к выполнению команды
Table := InitContext.InitTable^.UnitInfo;

не очень разбираюсь (


 
Cobalt ©   (2015-09-04 17:20) [4]

Скорее всего, в одном из используемых модулей в Finalization случился Abort, который поломал цепочку вызовов.


 
Rouse_ ©   (2015-09-04 17:38) [5]


> Cobalt ©   (04.09.15 17:20) [4]
> Скорее всего, в одном из используемых модулей в Finalization
> случился Abort, который поломал цепочку вызовов.

Алгоритм финализации писался умными людьми, рассчитывающими на случайный Abort в процессе :)
http://habrahabr.ru/post/209902/


 
Игорь Шевченко ©   (2015-09-04 19:02) [6]

http://www.catb.org/jargon/html/F/fandango-on-core.html



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

Текущий архив: 2016.07.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
15-1443303004
Юрий
2015-09-27 00:30
2016.07.24
С днем рождения ! 27 сентября 2015 воскресенье


2-1414689143
Signal
2014-10-30 21:12
2016.07.24
Другое приложение и контекстное меню


15-1440522423
кгшзх
2015-08-25 20:07
2016.07.24
календарно космологическое


15-1447710719
GanibalLector
2015-11-17 00:51
2016.07.24
Portmon только для Ethernet а


15-1442179801
Юрий
2015-09-14 00:30
2016.07.24
С днем рождения ! 14 сентября 2015 понедельник