|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 31, 2004 18:30:45 Все знают что при компилляции можно указать выравнивание структур данных по 1, 2, 4 и 8 байтовой границе. Проблема в том, что в одной ДЛЛ может быть установлено 4х байтововое выравнивание, а в другой 1 байтовое и т.д. Например, если при компиляции своего проекта указать "неверное" выравнивание структур данных, то при вызове экспортируемой функции из DLL можно повредить стек со всеми вытекающими... Какаким образом и откуда я могу узнать по какой границе выравнивались данные в той или иной библиотеке? например в наличии имеется DLL, LIB и .H файлы. Спасибо! |
|
|
Дата: Окт 31, 2004 20:32:15 Чего??? какое выравниевание? Если написать A dd 0 B db 1 то это будет структура из 5-и байт независимо от выравнивания. Возможно имеется ввиду выравнивание начала структур по границе, кратной какому-нить числу. |
|
|
Дата: Окт 31, 2004 20:55:40 имеется ввиду только то, что написано. |
|
|
Дата: Окт 31, 2004 21:31:38 2 Turkish если выравнивание равно 1, то это структура из 5 байт, а если 4 - то из восьми! Я сам с этим продолбался два дня, пока понял, в чем дело... Сумма размеров всех полей структуры равнялась 512 байт, но сама структура в памяти занимала 520 байт, соответственно, и на диск вместо одного сектор азаписывалось 1 сектор и еще 8 байт. Задолбался, пока нашел... Так что зря ты так... ;-) |
|
|
Дата: Ноя 1, 2004 14:59:11 Если здесь говорится про компилятор "C", а не ассемблер, то прямо в коде нужная структура окружается командами pragma:
#pragma pack (1) // Align on 1 byte
typedef struct tag_ITEM {
char ProductCode [3];
char ProductType;
} ITEM;
#pragma pack (8) // Align on 8 bytes
|
|
|
Дата: Ноя 1, 2004 16:08:48 я спрашивал о том, как и где достать инфу о том как выровнены данные в DLLках если в наличии есть собсно ДЛЛки, их ЛИБы и куча .Н файлов. похоже что нигде и никак =( |
|
|
Дата: Ноя 1, 2004 16:55:47 А в хидерах разве нет структур ?! |
|
|
Дата: Ноя 1, 2004 17:43:00 [quote][/quote] а что такое "структур"? 8) ладно тема закрыта... буду ковыряца сам |
|
|
Дата: Ноя 1, 2004 17:45:08 #pragma pack (8) // Align on 8 bytes правильнее было бы написать #pragma pack(pop) а в начале #pragma pack(push, 1) S_T_A_S_ наверняка есть и если все пИсано по уму то и с прагмами :) |
|
|
Дата: Ноя 1, 2004 20:26:52 вообще то по умолчанию все ДЛЛки в винде имеют выравнивание 4 байта. если только самому не поизвращаться в _своей_ ДЛЛке. |
|
|
Дата: Ноя 1, 2004 23:23:13 вообще то по умолчанию все ДЛЛки в винде имеют выравнивание 4 байта. если только самому не поизвращаться в _своей_ ДЛЛке. мне нельзя полагаться на "умолчание", очень часто это "умолчание" идет лесом... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.055 |