Как я могу изменить Erlang VM, чтобы использовать случайное 128-битное значение для одного из его значений pid?Изменение Erlang VM Pid
кажется наибольшее значение в это время, что я могу установить это:
32> pid(1, 32767, 8191).
** exception error: bad argument
in function list_to_pid/1
called as list_to_pid("<1.32767.8191>")
in call from c:pid/3 (c.erl, line 419)
33> pid(0, 32767, 8191).
<0.32767.8191>
Похоже поколения ИЗОДРОМНЫХ сводится к тому, что-то вроде этого в erts/emulator/beam/erl_ptab.h:283
:
ERTS_GLB_INLINE Eterm
erts_ptab_make_id(ErtsPTab *ptab, Eterm data, Eterm tag)
{
HUint huint;
Uint32 low_data = (Uint32) data;
low_data &= (1 << ERTS_PTAB_ID_DATA_SIZE) - 1;
low_data <<= ERTS_PTAB_ID_DATA_SHIFT;
huint.hval[ERTS_HUINT_HVAL_HIGH] = erts_ptab_data2pix(ptab, data);
huint.hval[ERTS_HUINT_HVAL_LOW] = low_data | ((Uint32) tag);
return (Eterm) huint.val;
}
Я хочу создать процесс с pid, содержащий случайное значение 128 бит. Так что я могу использовать его как возможность. http://en.wikipedia.org/wiki/Capability-based_security –
@EricdesCourtis, когда вы создаете процесс, у вас нет контроля над тем, какой pid он имеет, система берет «следующий» бесплатный. Все, что вы можете быть уверены в том, что оно уникально. – rvirding
Понял, но мой вопрос заключается в том, как изменить виртуальную виртуальную машину, чтобы получить это свойство. –