Форум: "Основная";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
ВнизЧто означают элементы с названиями ".1", ".2" и т.п? Найти похожие ветки
← →
Тыщ (2008-04-24 20:02) [0]Компилируем практически любую программу с ключом
-gp
,
смотрим в файл<имя программы>.map
,
и в начале секцииPublics by Name
видим:0002:0000133C ..
0001:00006688 ..
0002:00002654 .1
0002:0000266C .1
0002:0000265C .1
0002:00002664 .1
0002:00002660 .3
0002:000025A4 .5
0002:00002668 .7
... и т.д.
Очень интересно, что эти элементы означают и для чего они нужны?
Появляются в Delphi 4, 5, 6, 7.
← →
Тыщ (2008-04-24 20:13) [1]В Delphi 2006, 2007 это выглядит, как
<имя программы>...
System..1
System..3
что не слишком проясняет вопрос.
← →
Сергей М, (2008-04-24 20:35) [2]Удалено модератором
← →
Тыщ (2008-04-24 20:37) [3]очень жаль, если так.
← →
Игорь Шевченко © (2008-04-24 22:09) [4]идентификаторы, объявленные в ассемблерном коде модуля System ?
Насколько видно, все такие имена относятся к секции данных.
← →
Тыщ (2008-04-24 22:37) [5]Игорь Шевченко © (24.04.08 22:09) [4]
> идентификаторы, объявленные в ассемблерном коде модуля System ?
Ассемблерный код - это как? В Delphi я знаю только ассемблерные функции и процедуры.
> Насколько видно, все такие имена относятся к секции данных.
Нет, не все. Хотя большинство - к секции данных, да.
← →
Игорь Шевченко © (2008-04-24 23:46) [6]Тыщ (24.04.08 22:37) [5]
Э...в модуле System как бы в ассемблерных процедурах есть много ассемблерного кода. Кроме того, это могут быть и Compiler Magic-и.
← →
Тыщ (2008-04-25 00:06) [7]Игорь Шевченко © (24.04.08 23:46) [6]
Хм... Ну так идентификаторы, объявленные в процедурах не должны "просвечивать" в глобальную область имен и появляться в map-файле.
Что ж, без объяснений пока придется принять за "Compiler-магию".
← →
Германн © (2008-04-25 00:39) [8]
> Компилируем практически любую программу с ключом -gp,
> смотрим в файл <имя программы>.map,
> и в начале секции Publics by Name видим:
>
> 0002:0000133C ..
> 0001:00006688 ..
> 0002:00002654 .1
> 0002:0000266C .1
> 0002:0000265C .1
> 0002:00002664 .1
> 0002:00002660 .3
> 0002:000025A4 .5
> 0002:00002668 .7
> ... и т.д.
>
>
> Очень интересно, что эти элементы означают и для чего они
> нужны?
Во-во. Очень интересно "для чего они нужны". Вот только тут попутный вопрос. А для чего нужен map-файл?
← →
Тыщ (2008-04-25 00:43) [9]Германн © (25.04.08 0:39) [8]
> А для чего нужен map-файл?
Примерно для того же, для чего нужны логи - для контроля.
← →
KSergey © (2008-04-25 07:01) [10]> Тыщ (25.04.08 00:43) [9]
> для контроля.
А что вы по ним контролируете??
← →
Игорь Шевченко © (2008-04-25 09:45) [11]map-файл штука полезная. Во-первых, можно посмотреть, где произошла ошибка, во-вторых, этим пользуются обработчики исключений, генерирующие трассировку вызовов.
В-третьих, можно посмотреть, какие точно ресурсы вошли в приложение
← →
Sapersky (2008-04-25 14:13) [12]Встречал подобные имена у неявно объявленных типов, например:
Text : array of TMyRecord; // имя типа ".2"
TMyArray = array of TMyRecord; // а если объявить явно
Text : TMyArray; // будет конкретное имя "TMyArray"
Но в map-file типы, вроде как, не выводятся. Может, это имена "псевдопроцедур" initialization/finalization?
← →
Тыщ (2008-04-25 14:33) [13]Sapersky (25.04.08 14:13) [12]
Да, типы не выводятся в map-файл. А имена типов динамических массивов всегда включатся в exe-шник.
> Может, это имена "псевдопроцедур" initialization/finalization?
Часть - действительно они. А остальное что - непонятно.
Delphi 2006:0004:000000C4 Unit1..1
0004:0001823C PROGRAM...
0003:00001320 PROGRAM...
0004:0000002C System..5
← →
han_malign © (2008-04-25 15:19) [14].X - неявная переменная - счетчик ссылок на модуль(для отсекания выполненения секций initialization/finalization)
initialization
dec dword ptr[$004...], 1
jnb +...
.....
finalization
inc dword ptr[$004...], 1
jnz +...
.....
end.
если секций initialization/finalization нет, то она всеравно есть - возможно где-то еще используется...
← →
han_malign © (2008-04-25 15:21) [15]
> если секций initialization/finalization нет, то она всеравно есть
- в смысле - initialization/finalization - неявно присутствует, но состоит только из изменения этого самого счетчика...
← →
Тыщ (2008-04-25 16:46) [16]han_malign © (25.04.08 15:19) [14]
О, cпасибо за объяснение!
Ох уж эти навязчивые сервисы Delphi...
← →
Игорь Шевченко © (2008-04-25 19:38) [17]Таки magic
← →
ZENsan © (2008-04-26 14:42) [18].1 .2 .3 - эти не хитрости компилятора, а давно используемая вешь с константными данными.
Переведите адрес любого Entry
Start Length Name Class
0001:00401000 00054534H .text CODE
0002:00456000 00000798H .itext ICODE
0003:00457000 00001B00H .data DATA
0004:00459000 00004CD8H .bss BSS
0005:00000000 00000038H .tls TLS
Тоесть все адреса в МАП фаиле с адресом к примеру
0004:00004CCC Unit1..2
Должны транслироваться как 00459000 + 4CCC
На самом деле там переменная, хранящая статус инициализации модуля (была ли вызвана секция инициализации, если да, то повторно она не вызывается).
Код где используется этот адрес:
0045673C unit00000034.Initialization:
0045673C 832DD4DC450001 sub dword ptr [L0045DCD4],00000001h
00456743 7313 jnc L00456758
00456745 33C9 xor ecx,ecx
00456747 B201 mov dl,01h
00456749 A1A0514500 mov eax,[TForm2.Object_Entry]
0045674E E8D932FFFF call SUB_L00449A2C
00456753 A3D0DC4500 mov [L0045DCD0],eax
00456758 L00456758:
00456758 C3 retn
Ну а вообще такие ссылки все помоему на секцию BSS (http://en.wikipedia.org/wiki/Block_Started_by_Symbol).
Надеюсь прояснил чуток.. Может я где-то неправ - поправьте.
← →
ZENsan © (2008-04-26 14:45) [19]Я понимаю, что там хранятся инициализуремые данные и то что с ними связано вроде...
← →
ZENsan © (2008-04-26 14:47) [20]А в публик, так как модули используют друг друга и при инициализации модуля тот инициализирует используемые (поетому там нужна эта проверка, чтобы 100 раз не вызывать инициализацию.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.005 c