Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1233701918
Германн
2009-02-04 01:58
2009.04.05
RAD Studio 2007 vs BDS 2006


15-1233835334
Ega23
2009-02-05 15:02
2009.04.05
Знатоки JavaScript - посоветуйте


2-1234501240
dark_volk
2009-02-13 08:00
2009.04.05
Копирование таблиц


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


2-1234773241
Andrewtitoff
2009-02-16 11:34
2009.04.05
Word Отступ слева





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский