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

Вниз

Что означают элементы с названиями ".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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.013 c
15-1233646608
keymaster
2009-02-03 10:36
2009.04.05
Вопрос к знатокам ODAC


15-1233869486
Юрий
2009-02-06 00:31
2009.04.05
С днем рождения ! 6 февраля 2009 пятница


3-1217827688
Xmen
2008-08-04 09:28
2009.04.05
Соединение с FireBird


2-1234471261
Krozzz
2009-02-12 23:41
2009.04.05
Как считать данные из компонента Edit? (API)


3-1218000664
AlexeyMir
2008-08-06 09:31
2009.04.05
Помогите с SQL-запросом