Код (Text): union Misc PhysicalAddress dd ? VirtualSize dd ? ends как сие будет выглядеть на фасме? и вообще что делает оператор union?
какая те разница как это выглядти если ты не знаеш что это такое %) и почитай справку к фасму или макросыего посмотри, там это есть union U field_2 dd ? field_2b db ? ends и PE заодно получше изучи, там этот юнион нах не нужен
Union - это объединение. Union - это одни и те же данные в разных представлениях. Размер union'а - размер самого большого поля. В SDK это определено как и означает, что на самом деле PhysicalAddress и VirtualAddress это одно и тоже поле, называющееся по-разному. Юнионы полезны, например в типах вроде VARIANT, когда есть поле VariantType (string,int,array,dispatch,etc.) и поле, в котором содержится информация, зависящая от типа (VariantType): Тоесть все поля, что перечислены в юнионе - это одно и тоже поле (физически).
юнион можно (а м.б. и нужно) выкинуть нафик и оставить вместо него одно из его полей. а также имеют одинаковый размер
barton Выражу мысль немного другими словами ))) Иногда в программе полезно обращаться к одному участку памяти по разному! Иногда это хочется интерпретировать как 4 байта, а иногда хочется как два слова, а иногда и как одно двойное слово! Вопрос как это сделать если у нас всего четыре байта ? Тогда на помощь приходит "Объединение концепций" в одном случае это концепция указателя, который можно зачитать и кинуть в переменную. Но иногда хочется понимать это как 4 байта и к примеру распечатать на стандартном выводе(читай дисплэй экрана). А не редко возникает потребность понимать одну область памяти, но под разными именами. К примеру в одной программе это характеристика, а вдругой тоже самая структура но адрес!
> а также имеют одинаковый размер не совсем так.. юнион будет размером со структуру abc, а е - можно трактовать как первый байт (если считать char байтом) этой структуры
barton Ну это один из возможных случаев, который как правило токо в VARIANTtag и юзается, больше особо то нигде и не видел надобности )
Всмысле то, что в юнионе есть структура как поле ? Ну вообще много где на самом деле.. Например, в структуре IRP в DDK... PS: шнек-шнек =)
Ну и если брать Си, то размер union такой, что в нём поместится максимальный его член и что union будет выровнен в памяти так, чтобы машина могла к нему нормально обращаться (впрочем не факт, возможно подобные махинации компилятор берёт на себя.) На счёт ассемблеров не знаю.