|
|
|
# shithook
|
|
|
|
|
|
|
|
A c++ header only library for inline hooking. Supports x86_64, x86, and arm. Small, simple, and easily detected :)
|
|
|
|
|
|
|
|
# usage
|
|
|
|
|
|
|
|
Installing the hook/Init.
|
|
|
|
```cpp
|
|
|
|
__attribute__((noinline)) // very important that this is not inline!
|
|
|
|
FILE* hook_test(const char* filename, const char* open_type)
|
|
|
|
{
|
|
|
|
std::printf("> filename = %s\n", filename);
|
|
|
|
std::printf("> open type = %s\n", open_type);
|
|
|
|
std::getchar();
|
|
|
|
|
|
|
|
return hook::get_func(&fopen)(filename, open_type);
|
|
|
|
}
|
|
|
|
|
|
|
|
hook::make_hook(&fopen, &hook_test);
|
|
|
|
```
|
|
|
|
|
|
|
|
### Calling Original
|
|
|
|
|
|
|
|
`hook::get_func` is templated so that you can pass a function pointer I.E `&fopen` and the returned pointer will be of that type.
|
|
|
|
|
|
|
|
```
|
|
|
|
return hook::get_func(&fopen)(filename, open_type); // returned value is of type: FILE* (*)(const char*, const char*);
|
|
|
|
```
|
|
|
|
|
|
|
|
### Disable Hook
|
|
|
|
|
|
|
|
```
|
|
|
|
hook::disable(&fopen);
|
|
|
|
```
|
|
|
|
|
|
|
|
### Enable Hook
|
|
|
|
|
|
|
|
```
|
|
|
|
hook::enable(&fopen);
|
|
|
|
```
|