我想改变一个 ELF 可执行函数调用并替换它的参数之一。可执行文件调用dlopen()
函数并RTLD_NOW
作为标志参数传递。我想把它改成RTLD_LAZY
.
检测完成此调用的确切位置并替换参数的最简单方法是什么。
我必须在生产环境上做,所以我只有GNU工具链,gcc,gdb等。
我想改变一个 ELF 可执行函数调用并替换它的参数之一。可执行文件调用dlopen()
函数并RTLD_NOW
作为标志参数传递。我想把它改成RTLD_LAZY
.
检测完成此调用的确切位置并替换参数的最简单方法是什么。
我必须在生产环境上做,所以我只有GNU工具链,gcc,gdb等。
最简单的方法是使用 数据库. 在dlopen
函数上放置一个断点,并更改参数(可能在堆栈上传递)。RTLD_NOW
定义为 2。只需将其更改为 1 ( RTLD_LAZY
)。
综上所述,在 gdb
breakpoint dlopen
run
set stack_memory_address = 1
continue
stack_memory_address
您的模式参数的地址在哪里。