Что Fiddle.dlwrap и Fiddle.dlunwrap делают в Ruby?

Я пытаюсь понять, как работает библиотека Руби Fiddle. Я в основном понимаю, как он взаимодействует с libffi, но есть одна вещь, которая до сих пор сбивает меня с толку: что на самом деле делают Fiddle.dlwrap и Fiddle.dlunwrap?

В документации просто сказано

dlunwrap(addr)

Возвращает шестнадцатеричное представление адреса указателя памяти addr

dlwrap(val)

Возвращает указатель в памяти на шестнадцатеричный адрес функции val

ruby-doc.org)

Я попытался поэкспериментировать с их передачей различных типов объектов и строк. Методы всегда возвращают значения независимо от того, что вы передаете (не только шестнадцатеричные строки указателей на функции C). Кажется, что dlwrap просто возвращает адрес памяти переданного объекта, но в этом случае две вещи не имеют особого смысла:

  1. Если я передаю короткую строку и создаю указатель, используя результат в качестве адреса, память, на которую он указывает, не является строкой.
  2. Если я передаю число, оно просто возвращает идентификатор объекта числа.

Если у кого-то есть секретные знания о внутренней работе над Fiddle, и он готов поделиться, пожалуйста, помогите:)

0 ответов

Другие вопросы по тегам