Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
ВнизКрах приложения внутри 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c