Что такое код hw_getanchorsobj

Содержание

Что такое код hw_getanchorsobj

(PHP 3>= 3.0.3, PHP 4)

hw_GetAnchorsObj — записи объектов якорей документа.

Описание

array hw_getanchorsobj (int connection, int objectID)

Возвращает массив записей объектов с якорями документа с object ID objectID .


Назад Оглавление Вперёд
hw_GetAnchors Вверх hw_GetAndLock

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

Что такое код hw_getanchorsobj

(PHP 3>= 3.0.3, PHP 4)

hw_GetAnchorsObj — записи объектов якорей документа.

Описание

array hw_getanchorsobj (int connection, int objectID)

Возвращает массив записей объектов с якорями документа с object ID objectID .


Назад Оглавление Вперёд
hw_GetAnchors Вверх hw_GetAndLock

Материалы, которые находятся на этой страничке, любезно предоставлены Игорем Ивановым

Что такое управляемый код What is «managed code»?

При работе с платформой .NET Framework вы будете часто сталкиваться с термином «управляемый код». When working with .NET Framework, you will often encounter the term «managed code». В этом документе приводится пояснение этого термина и дополнительные сведения о нем. This document will explain what this term means and additional information around it.

В первом приближении управляемым кодом называется код, выполнение которого управляется средой выполнения. To put it very simply, managed code is just that: code whose execution is managed by a runtime. В этом случае соответствующая среда выполнения называется общеязыковой средой выполнения или средой CLR, независимо от реализации (Mono, .NET Framework или .NET Core). In this case, the runtime in question is called the Common Language Runtime or CLR, regardless of the implementation (Mono or .NET Framework or .NET Core). Среда CLR отвечает за использование управляемого кода, его компиляцию в машинный код и последующее выполнение. CLR is in charge of taking the managed code, compiling it into machine code and then executing it. Кроме того, среда выполнения предоставляет несколько важных служб, таких как автоматическое управление памятью, границы безопасности, безопасность типа и т. д. On top of that, runtime provides several important services such as automatic memory management, security boundaries, type safety etc.

Сравните это с запуском программы C/C++, которая также называется «неуправляемым кодом». Contrast this to the way you would run a C/C++ program, also called «unmanaged code». В мире неуправляемого кода практически за все отвечает программист. In the unmanaged world, the programmer is in charge of pretty much everything. Сама программа представляет собой двоичный файл, который операционная система (ОС) загружает в память и запускает. The actual program is, essentially, a binary that the operating system (OS) loads into memory and starts. За все остальное — от управления памятью до различных аспектов безопасности — отвечает программист. Everything else, from memory management to security considerations are a burden of the programmer.

Управляемый код пишется в одном из языков высокого уровня, которые могут выполняться в .NET, например C#, Visual Basic, F# и других. Managed code is written in one of the high-level languages that can be run on top of .NET, such as C#, Visual Basic, F# and others. При компиляции кода, написанного на этих языках, с помощью соответствующего компилятора вы получаете не машинный код. When you compile code written in those languages with their respective compiler, you don’t get machine code. Вы получаете код промежуточного языка, который затем компилируется и запускается средой выполнения. You get Intermediate Language code which the runtime then compiles and executes. Язык C++ является исключением из этого правила, так как он позволяет создавать машинные неуправляемые двоичные файлы, которые запускаются в Windows. C++ is the one exception to this rule, as it can also produce native, unmanaged binaries that run on Windows.

Промежуточный язык и выполнение Intermediate Language & execution

Что такое «промежуточный язык» (сокращенно IL)? What is «Intermediate Language» (or IL for short)? Это результат компиляции кода, написанного на языках высокого уровня .NET. It is a product of compilation of code written in high-level .NET languages. После компиляции кода, написанного на одном из этих языков, вы получаете двоичный файл на базе IL. Once you compile your code written in one of these languages, you will get a binary that is made out of IL. Важно отметить, что IL не зависит от языка, выполняемого поверх среды выполнения. Для него даже есть отдельная спецификация, с которой при желании можно ознакомиться. It is important to note that the IL is independent from any specific language that runs on top of the runtime; there is even a separate specification for it that you can read if you’re so inclined.

После создания IL из кода высокого уровня вы, скорее всего, захотите запустить его. Once you produce IL from your high-level code, you will most likely want to run it. В этот момент среда CLR берет управление на себя и запускает процесс JIT-компиляции, используя JIT для преобразования кода из промежуточного языка в машинный код, который может выполняться на ЦП. This is where the CLR takes over and starts the process of Just-In-Time compiling, or JIT-ing your code from IL to machine code that can actually be run on a CPU. Таким образом, среде CLR точно известно, что делает код, поэтому она может эффективно управлять им. In this way, the CLR knows exactly what your code is doing and can effectively manage it.

Промежуточный язык иногда называют языком CIL или MSIL. Intermediate Language is sometimes also called Common Intermediate Language (CIL) or Microsoft Intermediate Language (MSIL).

Взаимодействие неуправляемого кода Unmanaged code interoperability

Конечно же, среда CLR позволяет пересекать границы между управляемым и неуправляемым кодом, и даже в библиотеках базовых классов объем подобного кода довольно велик. Of course, the CLR allows passing the boundaries between managed and unmanaged world, and there is a lot of code that does that, even in the Base Class Libraries. Это называется взаимодействием или межпрограммным взаимодействием. This is called interoperability or just interop for short. Все это позволяет вам, например, заключить неуправляемую библиотеку в оболочку и вызвать ее. These provisions would allow you to, for example, wrap up an unmanaged library and call into it. Но следует отметить, что после того как код пересекает границы среды выполнения, управление выполнением снова осуществляется в виде неуправляемого кода с соответствующими ограничениями. However, it is important to note that once you do this, when the code passes the boundaries of the runtime, the actual management of the execution is again in the hand of unmanaged code, and thus falls under the same restrictions.

Аналогично, C# — это язык, позволяющий использовать неуправляемые конструкции, такие как указатели, прямо в коде с помощью так называемого небезопасного контекста, указывающего часть кода, для которой выполнение не управляется средой CLR. Similar to this, C# is one language that allows you to use unmanaged constructs such as pointers directly in code by utilizing what is known as unsafe context which designates a piece of code for which the execution is not managed by the CLR.

Самый маленький шелл-код. Создаем 44-байтовый Linux x86 bind shellcode

Содержание статьи

Shell-код представляет собой набор машинных команд, позволяющий получить доступ к командному интерпретатору (cmd.exe в Windows и shell в Linux, от чего, собственно, и происходит его название). В более широком смысле shell-код — это любой код, который используется как payload (полезная нагрузка для эксплоита) и представляет собой последовательность машинных команд, которую выполняет уязвимое приложение (этим кодом может быть также простая системная команда, вроде chmod 777 /etc/shadow) :

Немного теории

Уверен, что многие наши читатели и так знают те истины, которые я хочу описать в теоретическом разделе, но не будем забывать про недавно присоединившихся к нам хакеров и постараемся облегчить их вхождение в наше непростое дело.

Системные вызовы

Системные вызовы обеспечивают связь между пространством пользователя (user mode) и пространством ядра (kernel mode) и используются для множества задач, таких, например, как запуск файлов, операции ввода-вывода, чтения и записи файлов.

Для описания системного вызова через ассемблер используется соответствующий номер, который вместе с аргументами необходимо вносить в соответствующие регистры.

Регистры

Регистры — специальные ячейки памяти в процессоре, доступ к которым осуществляется по именам (в отличие от основной памяти). Используются для хранения данных и адресов. Нас будут интересовать регистры общего назначения: EAX, EBX, ECX, EDX, ESI, EDI, EBP и ESP.

Стеком называется область памяти программы для временного хранения произвольных данных. Важно помнить, что данные из стека извлекаются в обратном порядке (что сохранено последним — извлекается первым). Переполнение стека — достаточно распространенная уязвимость, при которой у атакующего появляется возможность перезаписать адрес возврата функции на адрес, содержащий shell-код.

Проблема нулевого байта

Многие функции для работы со строками используют нулевой байт для завершения строки.

Таким образом, если нулевой байт встретится в shell-коде, то все последующие за ним байты проигнорируются и код не сработает, что нужно учитывать.

Необходимые нам инструменты

  • Linux Debian x86/x86_64 (хотя мы и будем писать код под x86, сборка на машине x86_64 проблем вызвать не должна);
  • NASM — свободный (LGPL и лицензия BSD) ассемблер для архитектуры Intel x86;
  • LD — компоновщик;
  • objdump — утилита для работы с файлами, которая понадобится нам для извлечения байт-кода из бинарного файла;
  • GCC — компилятор;
  • strace — утилита для трассировки системных вызовов.

Если бы мы создавали bind shell классическим способом, то для этого нам пришлось бы несколько раз дергать сетевой системный вызов socketcall() :

  • net.h/SYS_SOCKET — чтобы создать структуру сокета;
  • net.h/SYS_BIND — привязать дескриптор сокета к IP и порту;
  • net.h/SYS_LISTEN — начать слушать сеть;
  • net.h/SYS_ACCEPT — начать принимать соединения.

И в конечном итоге наш shell-код получился бы достаточно большим. В зависимости от реализации в среднем выходит 70 байт, что относительно немного. Но не будем забывать нашу цель — написать максимально компактный shell-код, что мы и сделаем, прибегнув к помощи netcat!

Почему размер так важен для shell-кода?

Ты, наверное, слышал, что при эксплуатации уязвимостей на переполнение буфера используется принцип перехвата управления, когда атакующий перезаписывает адрес возврата функции на адрес, где лежит shell-код. Размер shell-кода при этом ограничен и не может превышать определенного значения.

Shell-код мы будем писать на чистом ассемблере, тестировать — в программе на С. Наша заготовка bind_shell_1.nasm , разбитая для удобства на блоки, выглядит следующим образом:

Сохраним ее как super_small_bind_shell_1.nasm и далее скомпилируем:

а затем слинкуем наш код:

и запустим получившуюся программу через трассировщик (strace), чтобы посмотреть, что она делает:

Запуск bind shell через трассировщик

Xakep #246. Учиться, учиться, учиться!

Как видишь, никакой магии. Через системный вызов execve() запускается netcat , который начинает слушать на порте 12345, открывая удаленный шелл на машине. В нашем случае мы использовали системный вызов execve() для запуска бинарного файла /bin/nc с нужными параметрами ( -le/bin/sh -vp12345 ).

execve() имеет следующий прототип:

  • filename обычно указывает путь к исполняемому бинарному файлу — /bin/nc ;
  • argv[] служит указателем на массив с аргументами, включая имя исполняемого файла, — [«/bin//nc», «-le//bin//sh», «-vp12345»] ;
  • envp[] указывает на массив, описывающий окружение. В нашем случае это NULL, так как мы не используем его.

Синтаксис нашего системного вызова (функции) выглядит следующим образом:

Описываем системные вызовы через ассемблер

Как было сказано в начале статьи, для указания системного вызова используется соответствующий номер (номера системных вызовов для x86 можно посмотреть здесь: /usr/include/x86_64-linux-gnu/asm/unistd_32.h ), который необходимо поместить в регистр EAX (в нашем случае в регистр EAX, а точнее в его младшую часть AL было занесено значение 11, что соответствует системному вызову execve() ).

Аргументы функции должны быть помещены в регистры EBX, ECX, EDX:

  • EBX — должен содержать адрес строки с filename — /bin//nc ;
  • ECX — должен содержать адрес строки с argv[] — «/bin//nc» «-le//bin//sh» «-vp12345» ;
  • EDX — должен содержать null-байт для envp[] .

Регистры ESI и EDI мы использовали как временное хранилище для сохранения аргументов execve() в нужной последовательности в стек, чтобы в блоке 5 (см. код выше) перенести в регистр ECX указатель (указатель указателя, если быть более точным) на массив argv[] .

Ныряем в код

Разберем код по блокам.

Блок 1 говорит сам за себя и предназначен для определения секции, содержащей исполняемый код и указание линкеру точки входа в программу.

Блок 2

Обнуляем регистр EDX, значение которого (NULL) будет использоваться для envp[] , а также как символ конца строки для вносимых в стек строк. Обнуляем регистр через XOR, так как инструкция mov edx, 0 привела бы к появлению null-байтов в shell-коде, что недопустимо.

Важно!

Аргументы для execve() мы отправляем в стек, предварительно перевернув их справа налево, так как стек растет от старших адресов к младшим, а данные из него извлекаются наоборот — от младших адресов к старшим.

Для того чтобы перевернуть строку и перевести ее в hex, можно воспользоваться следующей Linux-командой:

Блок 3

Ты, наверное, заметил странноватый путь к бинарнику с двойными слешами. Это делается специально, чтобы число вносимых байтов было кратным четырем, что позволит не использовать нулевой байт (Linux игнорирует слеши, так что /bin/nc и /bin//nc — это одно и то же).

Блок 4

Блок 5

Почему в AL, а не в EAX? Регистр EAX имеет разрядность 32 бита. К его младшим 16 битам можно обратиться через регистр AX. AX, в свою очередь, можно разделить на две части: младший байт (AL) и старший байт (AH). Отправляя значение в AL, мы избегаем появления нулевых байтов, которые бы автоматически появились при добавлении 11 в EAX.

Извлекаем shell-код

Чтобы наконец получить заветный shell-код из файла, воспользуемся следующей командой Linux:

и получаем на выходе вот такой вот симпатичный shell-код:

Тестируем

Для теста будем использовать следующую программу на С:

Компилируем. NB! Если у тебя x86_64 система, то может понадобиться установка g++-multilib :

Проверяем bind shell

Хех, видим, что наш shell-код работает: его размер — 58 байт, netcat открывает шелл на порте 12345.

Оптимизируем размер

58 байт — это довольно неплохо, но если посмотреть в shellcode-раздел exploit-db.com, то можно найти и поменьше, например вот этот размером в 56 байт.

Можно ли сделать наш код существенно компактнее?

Можно. Убрав блок, описывающий номер порта. При таком раскладе netcat все равно будет исправно слушать сеть и даст нам шелл. Правда, номер порта нам теперь придется найти с помощью nmap . Наш новый код будет выглядеть следующим образом:

А теперь попробуем подключиться и получить удаленный шелл-доступ. С помощью Nmap узнаем, на каком порте висит наш шелл, после чего успешно подключаемся к нему все тем же netcat :

И снова проверяем bind shell

Bingo! Цель достигнута: мы написали один из самых компактных Linux x86 bind shellcode. Как видишь, ничего сложного ;).

Что такое код hw_getanchorsobj

Здесь я создам несколько стандартных сообщений. После проделанной работы, при выполнении программы будут выскакивать стандартные диалоговые сообщения с полезной и не очень информацией. Лучший способ реализации сообщений — это создание и управление ими через Message class. Message class это своего рода контейнер для сообщений, он может использоваться в различных программах и функциональных модулях. Все сообщения хранятся в таблице T100, которую можно просмотреть используя транзакцию SE16.

SAP сообщения — важная часть любой ABAP программы, позволяющие информировать пользователя об ошибках, об успешном выполнении какой-либо операции и др.

Сообщения бывают следующих типов:

I — Information messages

Информационное сообщение, появляющееся в виде выскакивающего окна.

E — Error message
Сообщение об ошибке, отображается с строке статуса.

W — Warning message
Предупреждающее сообщение, отображается также в строке статуса.

S — Success/Status message
Успешное завершение

A — Termination/Abend
Ненормальное завершение

Итак создадим Message class. Можно создать через навигатор объектов SE80, а можно использовать транзакцию SE91.

Вводим краткий текст и сохраняем. Перейдем на вкладку Messages. На этой вкладке собственно и вводится текст сообщений.

Добавим в первую строку программы следующее :

И добавим MESSAGE i002 в текст программы.

Запустим на выполнение программу.

Нажимаем F8. Выскочило наше сообщение.

Теперь добавим еще два выскакивающих сообщения о количестве выбранных строк.

Обьявим переменную amount которая будет в качестве счетчика.

Зайдем в INCLUDE zkre_hw5_dataf01 и обнулим новую переменную. Сам подсчет можно организовать написав такой код:

Итоговый код INCLUDE zkre_hw5_dataf01 будет иметь вид:

Теперь зайдем в INCLUDE zkre_hw5_user_command_0100i01. добавим следующий код

Не забываемпользоваться кнопкой Pretty Printer. Сохраняем и проверяем на наличие ошибок. В моем случае ругнулся.

Но все равно сохраняем и активируем. Запускаем на выполнение программу. В зависимости от того были выбраны строки появится необходимое сообщение. Выбрано более 1 строки.

Не выбрано ни одной строки.

Добавим сообщение которое выводило бы количество выбранных записей.

Редактируем наш класс сообщений.

&1 место подстановки переменной. Изменим немного код

Вот таким образом можно использовать сообщения в SAP. В следующей статье я создам средство поиска Search Help — http://fibed.net/R/.

Обсуждения : 4 комментария

Комментарии

Александра

Добрый день. Подскажите, а где мы считаем значения переменной amount ?
Просто сначала в hw5 мы ее объявляем. Потом в инклуде INCLUDE zkre_hw5_dataf01 обнуляем.
Следом, в инклуде INCLUDE zkre_hw5_user_command_0100i01 мы пишем условие для переменной amount. Но где мы ее считаем?? у меня она получилась всегда равной нулю и записи в программе перестали выводиться

Подсчет строк реализован в INCLUDE zkre_hw5_dataf01. Я обновил статью, посмотрите.

Новые книги

Это одна из самых практичных книг по сарафанному и вирусному маркетингу. В ней изложены забавные и увлекательные истории, приведены убедительные результаты исследований. Баланс между теорией и ее практическим применением дает читателям все необходимое, для того чтобы разжигать, стимулировать и измерять эффективность маркетинговых кампаний с применением принципов сарафанного радио в онлайновой и офлайновой среде.

Уже в процессе работы с книгой вы сможете начать применять предложенные методы и зарабатывать!

Что такое код hw_getanchorsobj

Hyperwave был разработан IICM в Гразе (Graz). Первоначально пакет назывался Hyper-G и был изменен на Hyperwave после коммерциализации (где-то в 1996).

Hyperwave не является свободно распространяемым ПО. Текущая версия, 4.0, доступна www.hyperwave.com. Существует 30-дневная версия.

Hyperwave — это информационная сиситема, похожая на базы данных ( HIS , Hyperwave Information Server). Она напраавлена на хранение документов и управление ими. Документом может быть любая часть данных, которая может быть сохранена в файле. Каждый документ сопровождается своей объектной записью. Объектная запись содержит мета-данные документа. Мета-данные — это список атрибутов, который может быть расширен пользователем. Постоянные атрибуты всегда назначаются сервером Hyperwave, остальные могут меняться пользователем.

Помимо документов, все содержащиеся в документах гиперссылки также сохраняются в виде объектных записей. Гиперссылки, содержащиеся в документе, при его вставке в базу данных удаляются и сохраняются в виде отдельных объектов. объектные записи ссылок содержат информацию о начале и конце ссылки. Для восстановления оригинала документа вым нужно будет получить «плоский» докумет, без ссылок, список ссылок и заново вставить их в документ. Для этого предназаначены функции hw_pipedocument() и hw_gettext() . Преимущества выделения ссылок из документа очевидны. Как только документ, на который указывает ссылка, изменит свое имя, соответствующая ссылка также может быть легко изменена. Документ, содержащий ссылки, не подвержен изменениям. Вы даже можете добавить в документ ссылку, не изменяя его.

Говорят, что hw_pipedocument() и hw_gettext() выполняют вставку ссылок в документ автоматически, однако быстро сказка сказывается, да не просто дело делается. Вставка ссылок предполагает неизменную иерархию документов. На веб-сервере существует иерархия, полученная от файловой системы, но Hyperwave имеет свою собственную иерархию и имена не отражают позицию объекта в этой иерархии. Поэтому оздание ссылок прежде всего требует маппинга имен из иерархии Hyperwave в соотвествующие имена иерархии веб. Фундаментальное отличие между Hyperwave и Веб заключается в том, что в Hyperwave имя и иерархия — суть разные понятия. Имя не содержит никакой информации о положении объекта в иерархии. В Веб имя содержит и информацию о том, гед объект расположен иерархически. Это указывает на два возможных пути маппинга. В URL можно отражать иерархию Hyperwave и имя объекта или только имя. С цель сделать вещи проще, второй вариант более применим. Объект Hyperwave с именем ‘my_object’ мапится в ‘http://host/my_object’ безотносительно к его положению в иерархии Hyperwave. Объект с именем ‘parent/my_object’ может быть порожден ‘my_object’ в иерархии Hyperwave, однако в пространстве имен Веб оно проявится как противоположное и пользователь может быть неприятно удивлен. Это может быть предотвращено только путем оригинального именования объектов.

Применение этого решения порождает вторую проблему. Как вы запускаете php3? URL http://host/my_object не вызовет ни одного скрипта php3 до тех пор, пока вы не укажете вашему веб-скрверу переписать ее подобным образом: ‘http://host/php3_script/my_object’ и переменная $PATH_INFO должна быть равна скрипту ‘php3_script’, и возвращется объект с именем ‘my_object’ от Hyperwave сервера. Это только один недостаток, который может быть исправлен легко. Переписывание URL не дает доступа к другим документам веб-сервера. Скрипт php3 для поиска в Hyperwave сервере принципиально невозможен. По этой причине вам необходимо по меньшей мере два переназначения правила для исключения постоянных URLов, начинающихся с http://host/Hyperwave. Это — основное разделение пространства имен между Hyperwave и веб серверами.

На основе вышеизложенных механизмов ссылки вставляются в документ.

Это получается более сложно, если php3 не запущено как скрипт module/CGI, а как самостоятельное приложение, т.е. дампит содержимое Hyperwave сервера на CD-ROM. В этом случае имеет смысл сохранять иерархию Hyperwave и мапить ее на файловую систему. Это может вызвать конфликты с именамаи объектов если оини отражают свою собственную иерархию (если имена включают символ «/»). Однако, «/» может быть заменен на другой символ, типа «_», и все вроде встенет на свои места.

Сетевой протокол соединяется с Hyperwave сервером HG-CSP (Hyper-G Client/Server Protocol). Он основан на сообщениях, инициирующих определенный события, например получекния объектной записи. Вранних версиях Hyperwave сервера предлагалось два родных клиента (Harmony, Amadeus) для связи с сервером. Оба они исчезли после коммерциализации Hyperwave. На замену пришло нечто, называемое wavemaster. Wavemaster — это нечто протоколоподобное, конвертирующее HTTP в HG-CSP . Идея состоит в том, чтобы все администрирование базами данных и визуализация документов должно осуществляться через Веб-интерфейс. Wavemaster обеспечивает множество плейсхолдеров (placeholders) для постоянных операций по насторйке интерфейса. Эти плейсхолдеры называются языком PLACE . PLACE-у недостает множества преимуществ настоящих языков программирования, и любые расширения — это только увеличение списка плейсхолдеров. Это дает мне основание к использованию JavaScript, который, IMHO, не делает жизнь легче.

Добавление поддержки Hyperwave в PHP3 было введено с целью заполнить пробелы языков програмирования в управлении интерфейсов. Оно выполлняет все сообщения, определенные в HG-CSP , и более сложныве команды по получению завершенных документов.

Hyperwave имеет свою собственную терминологию для именования различных порций информации. Это было заимствовонно и расширенно. Практически все функции оперируют с одним из следующих типов данны:

object ID: уникально целое значение для каждого объекта в Hyperwave сервере. Это также одни из атрибутов объектной записи (ObjectID). ИД объектов часто используются в качестве входных параметров для спецификации объекта.

object record: строка с парами атрибут-значение в фоме атрибут=значение. пары одделены одна от друкой символом возврата каретки. ОБъектная запись может быть просто переконвертирована в объектный массив: hw_object2array() . Несколько функций (их имена заканчиваются на obj) возвращают объектные записи.

object array: ассоциативный массив со всеми атрибутами объекта. Ключ — имя атрибута. Если атрибут встречается в объектной записи несколько раз, это ведет к появлению другого индекса или индексного массива. Атрибуты, определнные в языке, будут иметь множство ключей, аббревиатур языка в ассоциативном массиве. Все другие множественные атрибуты формируют индексные массивы. Функции php3 никогда не возвращают объектных массивов.

hw_document: это совершенно новый тип данных, который описывает наличный документ, напимер HTML, PDF и др. Он несколько оптимизированн под HTML, но может быть использован и с другими форматами.

Несколько функций, возвращающих массивы объектных записей также возвращают ассоциативный массив со статистической информацией о нем. Этот массив — последний элемент массива объектных записей. Статистический массив содержит следующие поля:

Число объектных записей с атрибутом PresentationHints, установленным в Hidden. CollectionHead

Число объектных записей с атрибутом PresentationHints, установлденным в CollectionHead. FullCollectionHead

Число объектных записей с атрибутом PresentationHints, установленным в FullCollectionHead. CollectionHeadNr

Индекс в массиве объектных записей с атрибутом PresentationHints, установленным в CollectionHead. FullCollectionHeadNr

Индекс в массиве объектных записей с атрибутом PresentationHints, установленным в FullCollectionHead. Total

Общее число объектных записей. Интеграция с Apache

Модуль Hyperwave лучьше всего использовать, когда PHP3 скомпилированн в как модуль Apache. В этом случае основной Hyperwave сервер может быть скрыт от пользователя почти полностью, если Apache использует свой движок. Это объясняют следующие инструкции.

С тех пор, как PHP3 с Hyperwave поддерживают встраивание в Апач, предполагается, что родное решение Hyperwave — wavemaster — автоматически замещается. Т.е. Апач примет на себя функции веб-интерфейса к Hyperwave. Это не есть необходимость, но конфигурация упрощается. Идея достаточно проста. Перво-наперво вам необходим PHP3-скрипт, который оценивает переменную PATH_INFO и рассматривает ее значение как имя Hyperwave объекта. Пусть скрипт называется ‘Hyperwave’. URL http://your.hostname/Hyperwave/name_of_object возвратит Hyperwave объект с именем ‘name_of_object’. Реакция скрипта зависит от типа объекта. Если это коллекция, он возможно вернет список наследников. Если это документ, он возвратит mime-тип и содержание. Небольшое улучшение может быть достигнуто, если используется движок перезаписи Апача. С точки зрения пользователя, это более прямой путь, если URL http://your.hostname/name_of_object будет возвращать объект. Правило перезаписи достаточно простое:

для возврвта самого объекта

для разрешения проблемы поиска

для идентификации вас

для установки профиля

один для каждой дополнительной функции, как то показа атрибутов объекта. показа информации о пользователе, показа статуса сервера и др.

Замечания

Еще несколько заечаний:

Функция hw_InsertDocument расщеплена на hw_InsertObject() и hw_PutDocument() .

Имена некоторых функций пока еще не подтверждены.

Мольшинство функций требуют текущее соединение как первый параметр. Это ведет к достаточно большому количеству лишнего набора, что в большинстве случев излищне, поскольку существует только одно соединение. Соединение по умолчанию предоставляет улучшенный вариант решения.

hw_Changeobject

Описание

int hw_changeobject (int connection, int object_to_change, string commands);

Команда позволяет удалить, добавить или модифицировать индивидуальные атрибуты объектной записи. Объекты указываются идентификатором оюъекта, object_to_change ; команды придерживаются следующего синитаксиса:

Возвращает True при отсутствии ошибок, иначе False.

hw_Children

Описание

array hw_children (int connection, int objectID);

Возвращает массив идентификаторов объектов. Каждый иденитификатор — часть коллекции с идентификатором objectID . Массив содержит всех наследников, документы и коллекции.

hw_ChildrenObj

Описание

array hw_childrenobj (int connection, int objectID);

Возвращает массив объектных записей. Каждая запись — часть коллекции с идентификатором objectID . Массив содержит всех наследников, документы и коллекции.

hw_Close

Описание

int hw_close (int connection);

Возвращет false, если соединение не является действующим, в противном случае — true. Closes закрывает соединение с Hyperwave сервером с указанным номером соединения connection.

hw_Connect

Описание

int hw_connect (string host, int port, string username, string password);

Открывает соединение с Hyperwave сервером и возвращает номер соединение при успешном открытиии, или False, ели слединение не может быть установлено. Каждый аргумент должен быть «закавыченой» строкой, исключая номер порта. Аргумент username и password опциональны и могут не указываться. В случае ошибки идентификации, сервер завершит работу. Проще использовать идентификацию как пользователь anonymous. Функция возращает индекс соединения, необходимы для других функций Hyperwave. Вы можете открыть несколько соединений. Помните, что пароли не шифруются.

hw_Cp

Описание

int hw_cp (int connection, array object_id_array, int destination id);

Копирует объекты с идентификаторами, указанными во втором параметре в коллекцию с идентификатором destination id .

Возвращается число скопированных объектов.

hw_Deleteobject

Описание

int hw_deleteobject (int connection, int object_to_delete);

Удаляет объект с идентификатором, указанным во втором параметре. Будут удалены все экземпляры объекта.

При отсутствии ошибок возвращает true, инача — false.

hw_DocByAnchor

Описание

int hw_docbyanchor (int connection, int anchorID);

Возвращает идентификатор оъекта документа, который относится к якорю anchorID .

hw_DocByAnchorObj

Описание

string hw_docbyanchorobj (int connection, int anchorID);

Возвращает объектную запись объекта документа, относящегося к якорю anchorID .

hw_DocumentAttributes

Описание

string hw_documentattributes (int hw_document);

Возвращает объектную запись документа.

hw_DocumentBodyTag

Описание

string hw_documentbodytag (int hw_document);

Возвращает тег BODY для документа. Если документ в формате HTML, тег BODY должен быть напечатен перед документом.

hw_DocumentSize

Описание

int hw_documentsize (int hw_document);

Возвращает размер документа в байтах.

hw_ErrorMsg

Описание

string hw_errormsg (int connection);

Возвращает строку, содержащую последнее сообщени об ошибке или ‘No Error’. Если возвратилось False, функция не выполнилась. Сообщение относится к последней команде.

hw_EditText

Описание

int hw_edittext (int connection, int hw_document);

Загружет текстовый документ на сервер. Объектная запись документа не должна модифицироваться, пока документ редактируется. Эта функция работает только с чисто текстовыми документами. Она не отрывает специальных соединений для данных, поэтому управление соединением во время передачи данных блокируется.

hw_Error

Описание

int hw_error (int connection);

Возвращет номер последней ошибки. Если 0 — ошибок не было. Ошибка относится к последней команде.

hw_Free_Document

Описание

int hw_free_document (int hw_document);

освобождает память, занятую hw-документом.

hw_GetParents

Описание

array hw_getparentsobj (int connection, int objectID);

Возвращает индексированный массив идентификаторов объектов. Каждый ИД объекта относится к родителям объекта с идентификатором objectID .

hw_GetParentsObj

Описание

array hw_getparentsobj (int connection, int objectID);

Возвращает индексированный массив объектных записей плюс ассоциативный массив со статистической информацией об объектных записях. Ассоциативный массив — последний член возвращенного массива. Каждая объектная запись относится к родителю объекта с ИД objectID .

hw_GetChildColl

Описание

array hw_getchildcoll (int connection, int objectID);

Возвращает массив идентификаторов оюъектов. Каждый ИД объекта относится к наследной коллекции, коллекции с идентификатором objectID . Функция не возвращает наследуемые документы.

hw_GetChildCollObj

Описание

array hw_getchildcollobj (int connection, int objectID);

Возвращает массив объектных записей. Каждая запись относится к наследной коллекции, коллекции с идентификатором objectID . Функция не возвращает наследуемые документы.

hw_GetSrcByDestObj

Описание

array hw_getsrcbydestobj (int connection, int objectID);

Возвращает объектные записи всех якорных точек объекта с ИД objectID . Объект может быть как документом, так и якорем.

hw_GetObject

Описание

array hw_getobject (int connection, int objectID);

Возвращает объектную запись объекта с идентификатором objectID .

hw_GetAndLock

Описание

string hw_getandlock (int connection, int objectID);

Возвращает объектную запись объекта с ИД objectID . Объект также запирается, поэтому другие позователи не имеют к нему доступа, пока объект не будет разблокирован.

hw_GetText

Описание

int hw_gettext (int connection, int objectID, int rootID);

Возвращается документ с идентификатором объекта objectID . Если документ имеет якоря, которые можно вставить, то они будут сразу вставлены. Опциональный параметр rootID определяет, как ссылки будут вставляться в документ. По умолчанию подставляется 0, что означает конструирование ссылок из имен объктов назначения ссылок. Это применимо для веб-приложений. Если ссылка указывает на объект с именем ‘internet_movie’, ссылка HTML будет выглядеть как . Настоящее положение исходного объекта и объекта назначения в иерархии документа полностью игнорируется. Вы будете вынуждены установить ваш браузер, переписать URL приблизительно так: example ‘/my_script.php3/internet_movie’. ‘my_script.php3’ обработает $PATH_INFO и выдаст документ.

Если rootID не равен 0, ссылка конструируется из всех имен, начиная с объекта с ИД rootID , разделенных слешами от текущего объекта. Если для предидущего примера документ ‘internet_movie’ расположен в ‘a-b-c-internet_movie’, где ‘-‘ — разделители между уровнями иерархии, и исходный документ расположен по пути ‘a-b-d-source’, результирующая HTML-ссылка будет: . Это используется, если вы хотите утянуть се содержание сервера на диск и мапить иерархию докмента на файловую систему.

Эта функция работает только с чисто текстовыми документами. Она не отрывает специальных соединений для данных, поэтому управляющее соединение во время передачи данных блокируется.

hw_GetObjectByQuery

Описание

array hw_getobjectbyquery (int connection, string query, int max_hits);

Ищет объекты по всему серверу и возвращает массив идентификаторов объектов. Максимальное число найденных димитируется в max_hits . Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

hw_GetObjectByQueryObj

Описание

array hw_getobjectbyqueryobj (int connection, string query, int max_hits);

Ищет объекты по всему серверу и возвращает массив объектных записей. Максимальное число найденных димитируется в max_hits . Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

hw_GetObjectByQueryColl

Описание

array hw_getobjectbyquerycoll (int connection, int objectID, string query, int max_hits);

Ищет объект в коллекции с идентификатором objectID и возвращает массив идентификаторов объектов. Максимальное число найденных димитируется в max_hits . Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

hw_GetObjectByQueryCollObj

Описание

array hw_getobjectbyquerycollobj (int connection, int objectID, string query, int max_hits);

Ищет объект в коллекции с идентификатором objectID и возвращает массив объектных записей. Максимальное число найденных димитируется в max_hits . Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

hw_GetChildDocColl

Описание

array hw_getchilddoccoll (int connection, int objectID);

Возвращает массив идентификатров объектов наследуемых документов коллекции.

Смотри также hw_GetChildren() , hw_GetChildColl() .

hw_GetChildDocCollObj

Описание

array hw_getchilddoccollobj (int connection, int objectID);

Возвращает массив идентификатров объектов наследуемых документов коллекции.

hw_GetAnchors

Описание

array hw_getanchors (int connection, int objectID);

Возвращает массив идентификаторов объектов для якорей документа с ИД objectID .

hw_GetAnchorsObj

Описание

array hw_getanchorsobj (int connection, int objectID);

Возвращает массив объектных записей для якорей документа с ИД objectID .

hw_Mv

Описание

int hw_mv (int connection, array object id array, int source id, int destination id);

Перемещает объект с объектным идентификатром, указанным во втором параметре, из коллекции с идентификатором source id в коллекцию с идентификатором destination id . Если исходный ИД равен 0, объекты будут «отвязаны» от исходной коллекции. Если это последний экземпляр этого объекта, он будет удален.

Возвращется число перемещенных объектов.

hw_ >hw_Identify — идентификация пользователя

Описание

int hw_identify (string username, string password);

Идентификация пользователя с именем username и паролем password . Идентификация имеет силу только для текущей сессии. Я не думаю, что данная функция так уж часто используется. В большинстве случаев будет проще проводить идентификацию при установлении соединения.

hw_InCollections

Описание

array hw_incollections (int connection, array object_id_array, array collection_id array, int return_collections);

Проверяет, является ли множество объектов (документов или коллекций), определенное в object_id_array , частью коллекций, определенных в коллекции id_array . Если четвертый параметр return_collections равен 0, подмножество идентификаторов объектов, которое является частью коллекций (т.е. документы или коллекции, которые являются наследниками одной или более коллекций идентификаторов коллекции или их подколлекций, рекурсивно) возвращается как массив. Когда четвертый праметр равен 1, однако, множество соллекций, которые имеют наследников в этом подмножестве, возвращается как массив. Это позволяет пользователю, например, подчеркнуть часть иерархии коллекции, которая содержит находки предидущего запроса, в графическом виде.

hw_Info

Описание

string hw_info (int connection);

Возвращает сведения о текущем соединении. Возвращаемая строка имеет следующий формат: , ,

hw_InsColl

Описание

int hw_inscoll (int connection, int objectID, array object_array);

Вставить новую коллекцию с атрибутами как в object_array в коллекцию с идентификатором objectID .

hw_InsDoc

Описание

int hw_insdoc (int connection, int parentID, string object_record, string text);

Вставить новый документ с атрибутами как в object_array в коллекцию с идентификатором objectID . Эта функци может добавить как отдельную объектную запись, так и чистый ascii текст из text , если text получен. Если вы хотите добавить документ в общем, используйте hw_insertdocument() .

hw_InsertDocument

Описание

int hw_putdocument (int connection, int parent_id, int hw_document);

Загружает документ в коллекцию parent_id . Перед этим документ должен быть создан hw_NewDocument() . Удостоверьтесь, что объектная запись нового документа содержит следующие атрибуты: Type, DocumentType, Title и Name. Возможно, вы захотите также установить MimeType.

hw_New_Document

Описание

int hw_new_document (string document_data, string object_record, int document_size);

Возвращает новый hw-документ с данными, установленными по document_data и объектной записью object_record . Длина данных документа document_data передается в document_size . Эта функция не добавляет документ в Hyperwave сервер.

hw_Objrec2Array

Описание

array hw_objrec2array (string object_record);

Преобразует object_record в объектный массив.

hw_OutputDocument

Описание

int hw_outputdocument (int hw_document);

Печатает документ без тега BODY.

hw_pConnect

Описание

int hw_pconnect (string host, int port, string username, string password);

Возвращает индекс соединения в случае удачи, или false, если соединение не может быть установлено. Открывает устойчивое соединение с Hyperwave сервером. Каждый аргумент должен быть «заавыченной» строкой, исключая номер порта. Аргументы username и password опциональны и могут быть опущены. В случае ошибки идентификации, сервер будет остановлен. Проще применять вход пользователя anonymous. В ыможете открыть множество устойчивых соединений.

hw_PipeDocument

Описание

int hw_pipedocument (int connection, int objectID);

Возвращает hw-документ с идентификатором objectID . Если документ имеет якоря, которые можно вставить, то данная операция произойдет автоматически. Документ передается через специальное соединение для данных, поэтому управляющее соединение не блокируется.

hw_Root

Описание

Возвращает объектный идентификатор для гиперкоренной коллекции. Обычно это 0. Наследная коллекция от гиперкорневой — корневая, на сервере, с которым установлено соединение.

hw_Unlock

Описание

int hw_unlock (int connection, int objectID);

Разблокирует документ для доступа другим пользователям.

Что такое код hw_getanchorsobj

Для творческих людей одним из актуальных вопросов является уникальность и эксклюзивность их творчества, будь то мелодия, стихи, фонограмма или музыкальный клип.

КАК ДОКАЗАТЬ УНИКАЛЬНОСТЬ СВОИХ ПРОИЗВЕДЕНИЙ И ЗАЩИТИТЬ СЕБЯ ОТ ПЛАГИАТА?

В этом может помочь Международная организация по стандартизации — ISO, утверждающая всемирные стандарты в области Электронного управления авторскими и смежными правами.

На сегодняшний день уже утверждены и действуют следующие мировые стандарты:

  • ISWC — Международный стандарт кода для музыкальных произведений.
  • ISRC — Международный стандарт кода для звукозаписей.
  • ISMN — Международный стандарт музыкального номера.

В стадии утверждения сейчас находятся такие стандарты:

  • ISAN — Международный стандарт аудиовизуального номера.
  • ISTC — Международный стандарт кода для текстовых произведений.

Сегодня мы остановимся на первых двух кодах из этого перечня – ISWC и ISRC.

ISWC (International Standard Musical Work Code) — этот код определяет музыкальную работу, как уникальное нематериальное произведение. Такое произведение может быть результатом творчества одного или нескольких людей, независимо от их статуса авторских прав, распространения или соглашений, которые охватывают это произведение.

КОД ISWC НАПРЯМУЮ СВЯЗАН С КОДОМ ISRC

ISWC код присваивается исключительно произведению (мелодия или песня), и если автор и композитор планирует сделать запись фонограммы своего произведения или снять музыкальный клип, потребуется уже другой код — ISRC.

ISRC (International Standard Recording Code) – это международный стандартный код аудио или видео записи, который определяет их уникальность. Он присваивается первому собственнику смежных прав на фонограмму и идентифицирует звуковую запись на протяжении всего периода ее существования.

При этом, важный момент, о котором не следует забывать — код присваивает уникальность одной конкретной записи (оригиналу песни), поэтому ремиксы одной и той же песни требуют своего собственного кода ISRC.

ISRC код стал неотъемлемым атрибутом музыкальной индустрии. С его помощью можно легко вычислить правообладателя той или иной композиции в течение часа. С помощью ISRC кода музыканты могут защитить свою музыку от посягательств, в соответствии со строгими стандартами международной музыкальной индустрии.

Получить код ISRC могут как частные, так и юридические лица. Присвоение кода не происходит автоматически, для этого необходимо отправить анкету-заявку в национальное агентство ISRC.

Что дает код ISRC правообладателям? Это возможность отслеживать использование своих музыкальных произведений по всему миру. Например, иностранные радиостанции в отчетах об использованной музыке указывают именно ISRC код, таким образом, использование трека с присвоенным кодом можно легко отследить, в то время как, композиция без кода легко «потеряется», в том числе и из-за колебаний в транслитерации названия. +

Что такое код hw_getanchorsobj

Efficient rank and select operations on large bit-vectors based on the paper «Space-Efficient, High-Performance Rank & Select Structures on Uncompressed Bit Sequences». This library does not yet implement the full cspoppy implementation. Notably, it still uses the sub-optimal «Straw man» design for «Combined Sampling» on page 10.

This library will use support for some BMI2 CPU instructions on some x86 based CPUs if compiled with the appropriate flags on ghc-8.4.1 or later.

Rank and select

This library provides the following functions on indexed bit-vectors:

The supported indexed bit-vector types are:

Constructing and using an indexed bit-vector in the repl

The example below constructs an indexed bit-vector from a string and runs rank and select query operations on it. The bits in a string are in little-endian and can be of arbitrary length. The resulting bit-vector will be padded with 0-bits until the next 64-bit boundary.

A valid bit string contains zero or more characters. Characters other than 1 and 0 are permitted, but are ignored. For example spaces can be used to group bits for clarity.

Whilst the use of a bit string is convenient for the repl, for performance reasons, it is more typical to construct an indexed bit-vector from a 64-bit word vector:

Working with files

Bit strings are stored in files as a string of bits (little-endian, which is native for Intel platforms) padded to the nearest word8 (byte) without any additional structure.

Query such a structure directly is slow, so it is possible to load it into memory by way of memory mapping then constructing an additional Rank-Select-Bit-String index.

The following code shows how to query such bit vectors and run simple queries:

It is sufficient to build, test and benchmark the library as follows for basic performance. The library will be compiled to use broadword implementation of rank & select, which has reasonable performance.

To target the BMI2 instruction set, add the bmi2 flag:

The following benchmark shows the kinds of performance gain that can be expected from enabling the BMI2 instruction set for CPU targets that support them. Benchmarks were run on 2.9 GHz Intel Core i7, macOS High Sierra.

Что такое код hw_getanchorsobj

Efficient rank and select operations on large bit-vectors based on the paper «Space-Efficient, High-Performance Rank & Select Structures on Uncompressed Bit Sequences». This library does not yet implement the full cspoppy implementation. Notably, it still uses the sub-optimal «Straw man» design for «Combined Sampling» on page 10.

This library will use support for some BMI2 CPU instructions on some x86 based CPUs if compiled with the appropriate flags on ghc-8.4.1 or later.

Rank and select

This library provides the following functions on indexed bit-vectors:

The supported indexed bit-vector types are:

Constructing and using an indexed bit-vector in the repl

The example below constructs an indexed bit-vector from a string and runs rank and select query operations on it. The bits in a string are in little-endian and can be of arbitrary length. The resulting bit-vector will be padded with 0-bits until the next 64-bit boundary.

A valid bit string contains zero or more characters. Characters other than 1 and 0 are permitted, but are ignored. For example spaces can be used to group bits for clarity.

Whilst the use of a bit string is convenient for the repl, for performance reasons, it is more typical to construct an indexed bit-vector from a 64-bit word vector:

Working with files

Bit strings are stored in files as a string of bits (little-endian, which is native for Intel platforms) padded to the nearest word8 (byte) without any additional structure.

Query such a structure directly is slow, so it is possible to load it into memory by way of memory mapping then constructing an additional Rank-Select-Bit-String index.

The following code shows how to query such bit vectors and run simple queries:

It is sufficient to build, test and benchmark the library as follows for basic performance. The library will be compiled to use broadword implementation of rank & select, which has reasonable performance.

To target the BMI2 instruction set, add the bmi2 flag:

The following benchmark shows the kinds of performance gain that can be expected from enabling the BMI2 instruction set for CPU targets that support them. Benchmarks were run on 2.9 GHz Intel Core i7, macOS High Sierra.

Илон Маск рекомендует:  Asp объект asperror
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL