1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#include <libunwind.h> unw_word_t _ReadULEB (unsigned char **dpp) { unsigned shift = 0; unw_word_t byte, result = 0; unsigned char *bp = *dpp; while (1) { byte = *bp++; result |= (byte & 0x7f) << shift; if ((byte & 0x80) == 0) break; shift += 7; } *dpp = bp; return result; }