Передача параметров в библиотеку
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Передача параметров в библиотеку - 2009-08-25 02:50:16.440000
|
|
|
Dedаl
Сообщений: 32
Оценки: 0
Присоединился: 2009-08-25 02:37:07.223333
|
Есть несколько методов передачи параметров: registert и stdcall - основные… Во втором случае данные записываются определённым образом в памяти а в первом - напрямую в ргистры процессора (как я понял)…. Если в качестве параметра функции dll библиотеки - передаётся пароль, то если используется первый вариант передачи параметров - его будет нельзя перехватить или оочень сложно???? или разницы нету? Просто пишу сверх-безопасную систему БазДанных!
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 03:23:53.710000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ключевое слово register не гарантирует, что передача параметров будет именно через регистры. Да и строку ты никогда в регистры не положишь. В языках си и си++ не существует способа передать массив (а строка - это массив) через параметры функции. Как правило передаётся указатель на строку. register и stdcall - две разные вещи. Есть два способа передачи параметров - паскалевский (через жопу) и сишный. Разница в порядке помещения передаваемых параметров в стек и в том, кто стек будет потом чистить. Чтобы ответить на твой вопрос укажи следующее: От какого перехвата защищаешь свой мегапароль? Тогда и о способах защиты можно будет подумать :). Есть мнение, что ты не совсем представляешь, что делаешь. P.S. СУБД расшифровывается как система управления базами данных, а не как "система БазДанных". Есть нехорошее мнение, что с твоими знаниями (не хочу обидеть, но опят таки: программирование надо изучать постепенно) "сверхбезопастная система" будет на уровне школьной самодеятельности либо, что не менее вероятно, будет никому не нужна.
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 03:35:04.666666
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
Полный бардак в понимании вопроса. Во-первых, насколько мне известно, ни один современный высокоуровневый язык программирования не поддерживает передачу параметров прямо через регистры. В любом случае, это моветон, так как ты намертво привязываешься к архитектуре процессора. А прикинь, что есть архитектуры, работающие через один аккумуляторный регистр, или, что даже чаще, stack-based архитектуры. Во-вторых, stdcall - это стандартный сишный вызов подпрограммы. Как самая близкая альтернатива ему - паскалевский вызов: разница между ними только в том, в каком порядке параметры кладутся на стек. В-третьих, если передаёшь строку, то сначала убедись, что ты передаёшь именно набор чаров, а не ссылку на строку, размещённую в оперативной памяти - опять же, во многих современных языках ты работаешь именно со ссылкой. Ну и в четвёртых, всё это мало связано защищённостью программы. Если в серьёз заботит вопрос, то для начала почитай умные книжки на тему, а потом уже начинай писать сверх-безопасную систему. (Кстати, делай различие между базой данных и системой управления базами данных. По твоей фразе ты вообще какого-то мутанта пишешь)
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 03:41:14.236666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: kreol Во-вторых, stdcall - это стандартный сишный вызов подпрограммы. Как самая близкая альтернатива ему - паскалевский вызов: разница между ними только в том, в каком порядке параметры кладутся на стек. При паскалевском вызове очисткой стека дожна заниматься вызываемая процедура, а при сишном - вызывающая. Но к вопросу и желаниям автора это действительно не имеет никакого отношения.
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 03:56:28.800000
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: _SaZ_ При паскалевском вызове очисткой стека дожна заниматься вызываемая процедура, а при сишном - вызывающая. И чем это плохо? При паскалеподобном вызове в памяти программы инструкции по очистке стека будут записаны один раз - в коде подпрограммы. При сишном они будут записываться в каждом месте, где вызывается подпрограмма. Различие мелкое, но всё-таки в сторону паскалевского вызова.
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 12:09:39.183333
|
|
|
vvviperrr
Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
|
имхо чувак перепутал класс памяти register с методом передачи параметров в функцию fastcall (при котором компилятор ПЫТАЕТСЯ положить параметры в регистры, если это возможно). (если речь идет именно о передаче параметров в функцию, разумеется). quote:
Просто пишу сверх-безопасную систему БазДанных! все ясно
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 12:45:51.530000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: kreol И чем это плохо? Ничем не плохо :), просто btw, как говориться.
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 15:12:47.983333
|
|
|
Dedаl
Сообщений: 32
Оценки: 0
Присоединился: 2009-08-25 02:37:07.223333
|
Ну начнём попорядку, заново. Вот ссылка: http://www.interface.ru/borland/progrdelphi_p5_1.htm Библиотека написана на Дельфи и если бегло таблица по ссылке - выглядит так: Директива/Порядок занесения аргументов в стек/Кто отвечает за очистку стека/Передача аргументов через регистры register/Слева направо/Подпрограмма/Да pascal/Слева направо/Подпрограмма/Нет cdecl/Справа налево/Вызывающая программа/Нет stdcall/Справа налево/Подпрограмма/Нет Из таблицы видно что: register - единственный метод передачи у которого "Передача аргументов через регистры"… Вот собственно и вопрос… Библиотека уже существует и даже больше скажу, уже не один год эксплуатируется, НО, если всё делать на встроенном языке (очень напоминающем SQL), тогда передача закрытых даных в библиотеку не идёт, просто передаются константы, выглядит так: ——————- AutenticR autent,pass; TJ7ReadSync basename,TPassword From 1; ——————- Здесь TPassword - это просто константа - которая указывает библиотеке - что во время доступа к данным использовать результат последней аутентификации… Но если я использую не встроенный язык, а функционал, это выглядит так: ——————- TJ7ReadMasSync_u(1,basename,TJ7PassAutentikR_u(autent,pass),60); ——————- Получается что если с помощью отладчика или как-то - перехватить с какими параметрами я вызываю TJ7ReadMasSync_u - то можно перехватить результат аутентификации… Вот собственно и вопрос - если использовать метод передачи параметров: register - что в Дельфи по умолчанию, и должно быть чуточку быстрее - это усложняет процесс отладки??? Что касается супер-безопасности, то уж конечно не то чт вы привыкли видеть, база зашифрована и более того шифрование является встроенным (хоть и отключаемым), как и весь защтищённый обмен даными клиент-сервер… Если вы взломаете сервер - доступ к даным вам неудастся получить так как только клиент - может декодировать зашифрованные данные. Клиенту выдаётся имя/пароль и цифровой ключ на USB-накопителе, только в связке - клиентское ПО может декодировать данные… Кроме того есть дополнительные утилиты к БД, позволяющие контролировать целостность иавтоматически восстанавливать БД, вести лог обращений и системы управления паролями - которые предоставляют динамичсескую смену пароля базы даных (так чтобы клиенты могли получать доступ) и аннулирование цифровых ключей, если клиента надо заблокировать… (кому интересно, бегло здесь: http://ykolchurin.narod.ru/FVMas.html) Библиотека сейчас в 2- вариантах с методом передачи параметров: register и с stdcall Так что вопрос остаётся открытым…
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 16:10:08.670000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Про регистры уже всё написали. Строки через ни не передаются, прими это как аксиому. Если твой пароль есть в памяти процесса - то его, при желании найдут :). Значит остаётся защищать память от внешних глаз / защищать процесс от внедрения отладчиков и пр.
|
|
|
RE: Передача параметров в библиотеку - 2009-08-25 16:12:05.326666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Man, по твоей ссылке: quote:
ПРИМЕЧАНИЕ Директива register не означает, что все аргументы обязательно передаются через регистры процессора. Если число аргументов больше числа свободных регистров, то часть аргументов передается через стек.
|
|
|
RE: Передача параметров в библиотеку - 2009-08-26 02:49:52.293333
|
|
|
Dedаl
Сообщений: 32
Оценки: 0
Присоединился: 2009-08-25 02:37:07.223333
|
Ну если хотя бы часть пароля упадёт в регистры… думаю - это тоже не плохо :)…
|
|
|
RE: Передача параметров в библиотеку - 2009-08-26 12:15:18.830000
|
|
|
vvviperrr
Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
|
2Dedаl что есть пароль? строка символов. не положится она в регистр. Ни целиком, ни частью. Указатель на строку - можно. Или ты пароль передаешь по символам, например void foo(char a, char b, char c…, char N). Не неси бред вобщем. Тебе уже все ответили
|
|
|
RE: Передача параметров в библиотеку - 2009-08-26 13:49:40.683333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Таких программистов называют "волшебниками" :)
|
|
|
|
|