可执行文件调用
dlopen()
函数并将RTLD_NOW
作为标志参数传递。我想将其更改为
RTLD_LAZY
。最简单的方法是检测此调用的确切位置并替换参数。
我必须在生产环境中执行此操作,所以我只有GNU工具链,gcc,gdb等
#1 楼
最简单的方法是使用gdb。在dlopen
函数上设置一个断点,并更改参数(可能在堆栈上传递)。 RTLD_NOW
定义为2。只需将其更改为1(RTLD_LAZY
)。总而言之,请参见
gdb
模式参数的地址。评论
如何保存它,是否可以从gdb进行?
–烛光
13年8月4日在19:39
您可以使用十六进制编辑器,查找到在GDB中中断的偏移量,然后将1更改为2。
– jvoisin
13-10-26在14:23
评论
您是在谈论永久修补可执行文件或在运行时进行修改吗?都。在运行时对其进行测试。然后坚持下去。
从理论上讲,LD_PRELOAD是您的朋友,但是鉴于dlopen是在加载程序中实现的,因此这种方法很可能会失败。