我想知道是否可以通过调用或 glibc 入口点函数来重新启动具有不同参数的程序(忽略以前映射的文件)main()。
是否可以通过调用入口点函数重新启动程序?
逆向工程
linux
开发
x64
amd64
2021-07-10 23:28:19
1个回答
好吧,虽然绝对可以跳转到程序的入口点尝试重新启动它,但可能会出现各种阻止正确执行的后果,例如:
- 库初始化已经运行,第二次运行不是大多数库所期望的
- 可能已经分配了各种资源并初始化了变量,因此再次执行此操作可能不起作用。
那么你可以做的就是让程序在不实际退出的情况下模拟终止,然后跳转到入口点。Microsoft CRT 提供了函数_c_exit和_cexit用于此类目的,但似乎 glibc没有任何类似的. 因此,您可能必须atexit手动模拟对处理程序的调用以执行清理。