edit_db () принимает указатель на указатель в качестве параметра.
Итак, вам нужно что-то вроде:
db = LibDB.new_db()
# pack the 'db' pointer into a temporary bit of memory
dbp = FFI::MemoryPointer.new(:pointer)
dbp.write_pointer(db)
# equivalent of edit_db(&db);
LibDB.edit_db(dbp)
# read the 'db' pointer back out in case edit_db altered the actual pointer value
db = dbp.read_pointer