4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / hwbinder.h H
#ifndef HWBINDER_H_
#define hwbinder_h_

#include "base.h"
#include "binder.h"
#include "uapi_binder.h"
#include "utils.h"

#define HWBINDER_DEVICE "/dev/hwbinder"
#define HWSERVICE_MANAGER "[email protected]::IServiceManager"
#define TOKEN_MANAGER   "[email protected]::ITokenManager"

#define MOV_PTR(p, o)   p += (o)
#define ALIGN_32(p)   \
while (((uint64_t)p) % sizeof(uint32_t)){ p++; }
#define ALIGN_64(p)   \
while(((unsigned long long)p) % sizeof(8)){ p++; }

typedef void * hidl_pointer;

typedef struct _hidl_string{
    hidl_pointer buffer_;
    uint32_t size_;
    BOOL owns_buffer_;
}hidl_string, phidl_string;

typedef struct hidl_vec {
   hidl_pointer buffer;
   uint32_t size;
   BOOL owns_buffer;
} hidl_vec;

typedef struct service_list {
   struct service_list *next;
   const char *service_name;
   hidl_vec *token;
} service_list_t;


uint32_t find_hwservice(
    PBINDER_INFO info, 
    hidl_string* name,
    hidl_string* instance
);

uint32_t get_handle_by_token(
    PBINDER_INFO info,
    uint32_t tm,
    hidl_vec* tk
);

BOOL create_token(
    PBINDER_INFO info, 
    uint32_t tm, 
    uint32_t svc,
    hidl_vec* tk
);

BOOL unregister_token(
    PBINDER_INFO info,
    uint32_t tm,
    const hidl_vec* token
);

uint32_t get_token_manager(PBINDER_INFO info);


/* Create wrapper for hidl_strings. */
hidl_string *hidl_string_new(const char *str);
hidl_vec hidl_vec_new(BYTE* token, size_t size);
int hwbinder_open(PBINDER_INFO info, size_t mapsize);

#endif