当你在 main 中找不到程序逻辑的时候,如何考虑?
-
有没有注册异常处理程序。还有像
__cxa_atexit
这样退出时执行的函数。 -
__lib_start_main
的参数中有用于初始化的函数。顺便贴一下它的定义:int __libc_start_main( int (*main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end) );
・执行任何必要的安全检查,如果有效用户 ID 与真实用户 ID 不同。
・初始化线程子系统。
・注册rtld_fini以在此动态共享对象退出(或卸载)时释放资源。
・注册fini处理程序以在程序退出时运行。
・调用初始化函数(*init)。
・使用适当的参数调用 main ()。
・使用 main () 的返回值调用 exit ()。 -
通过字符串或字节数组的交叉引用,可以找出隐藏的操作。
所以当你遇到了灵异事件的时候,不要惊慌,不然连个难度 1 的题的隐藏操作都找不出来。