假设我有一个动态库(.so)在Linux上。我还有一个现有的应用程序使用该库。该库已经被剥离。我想为该库生成一些(大致的)头文件,以便我可以编写另一个使用它的程序。
使用objdump很容易看到库中有哪些函数,并使用ltrace查看每次调用时的情况。
如何找出函数参数?
一些想法:我可以使用LD_PRELOAD或dlsym类型的技巧来加载一个假库,该假库在调用原始库中的任何函数时都会查看堆栈。我也可以在交换机中执行某些操作,以转储寄存器(这是在ARM上,所以我想应该是r0-r3)。通过更多的工作(通过查看反汇编),可能还可以弄清楚寄存器是否包含将被取消引用的指针,然后让交换机函数转储该指针处的内容。
从那里到“该函数以以下字段的结构体指针作为其第一个参数...”似乎是一个很大的步骤。是否有自动化工具可用于此类事情?
注意:我对函数的运行方式不感兴趣,只想知道如何为它们提供正确的数据。
使用objdump很容易看到库中有哪些函数,并使用ltrace查看每次调用时的情况。
如何找出函数参数?
一些想法:我可以使用LD_PRELOAD或dlsym类型的技巧来加载一个假库,该假库在调用原始库中的任何函数时都会查看堆栈。我也可以在交换机中执行某些操作,以转储寄存器(这是在ARM上,所以我想应该是r0-r3)。通过更多的工作(通过查看反汇编),可能还可以弄清楚寄存器是否包含将被取消引用的指针,然后让交换机函数转储该指针处的内容。
从那里到“该函数以以下字段的结构体指针作为其第一个参数...”似乎是一个很大的步骤。是否有自动化工具可用于此类事情?
注意:我对函数的运行方式不感兴趣,只想知道如何为它们提供正确的数据。