| a | b |  | 
|---|
|  | 0 | + | #include <iostream> | 
|---|
|  | 0 | + | #include <cstdio> | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | using namespace std; | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | void tFunc(int (*_printf)(const char*,...)) | 
|---|
|  | 0 | + | { | 
|---|
|  | 0 | + | _printf("You got here!"); | 
|---|
|  | 0 | + | } | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | int main(int argc, char* argv[]) | 
|---|
|  | 0 | + | { | 
|---|
|  | 0 | + | unsigned int fsize; | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | unsigned int mv, tv; | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | mv = reinterpret_cast<unsigned int>(main); | 
|---|
|  | 0 | + | tv = reinterpret_cast<unsigned int>(tFunc); | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | fsize = mv - tv; | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | int (*_printf)(const char*, ...); | 
|---|
|  | 0 | + | void (*_tFunc)(int (*)(const char*, ...)); | 
|---|
|  | 0 | + | _printf = printf; | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | unsigned char buff[256]; | 
|---|
|  | 0 | + | unsigned char* cpy = (unsigned char*) tFunc; | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | for(unsigned int i = 0; i < fsize; i++) | 
|---|
|  | 0 | + | { | 
|---|
|  | 0 | + | buff[i] = cpy[i]; | 
|---|
|  | 0 | + | } | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | _tFunc = (void(*)(int(*)(const char*, ...))) buff; | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | _tFunc(_printf); | 
|---|
|  | 0 | + | //tFunc(_printf); | 
|---|
|  | 0 | + |  | 
|---|
|  | 0 | + | return 0; | 
|---|
|  | 0 | + | } | 
|---|
| ... |  | 
|---|