For a dynamic library .so file , we can use dlopen(), dlsym() to call  functions inside a .so file.
Can the functions in .so call functions in main() executable? Most of the time it works, but not always. It's not very reliable.
A reliable way to let functions in .so call functions in main() executable is to save the fucntion address as a struct, and pass it to a .so initial function and .so save it.
| function struct to pass | 
typedef struct {   void (*mf_hide_win_sym)(); … } | 
| save function address to pass to .so | 
func->mf_hide_win_sym = hide_win_sym;
  | 
 
| .so call main() exec function | 
| gmf.mf_hide_win_sym() |