this looks ugly, we will need to unify `void*` `unsigned long (long)` etc later.