Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 对于没有源代码的二进制函数,有没有办法获得参数的数量_Linux_Solaris - Fatal编程技术网

Linux 对于没有源代码的二进制函数,有没有办法获得参数的数量

Linux 对于没有源代码的二进制函数,有没有办法获得参数的数量,linux,solaris,Linux,Solaris,我没有源代码,但是有二进制代码。使用命令“nm binary_name”,我可以知道二进制文件中的函数 我能知道一个函数有多少个参数吗?在solaris下,是否有这样做的方法 e、 如果函数为:func1(a int,b int,c int),则有3个参数 谢谢 Daniel假设这是C代码,则没有-不存在 编译器/链接器省略了这些信息。如果是C++代码,则只保留函数的已损坏名称并以编码形式包含参数。p> 假设这是C代码,那么就没有了- 编译器/链接器省略了这些信息。如果是C++代码,则只保留函数

我没有源代码,但是有二进制代码。使用命令“nm binary_name”,我可以知道二进制文件中的函数

我能知道一个函数有多少个参数吗?在solaris下,是否有这样做的方法

e、 如果函数为:func1(a int,b int,c int),则有3个参数

谢谢
Daniel

假设这是C代码,则没有-不存在
编译器/链接器省略了这些信息。如果是C++代码,则只保留函数的已损坏名称并以编码形式包含参数。p> 假设这是C代码,那么就没有了-
编译器/链接器省略了这些信息。如果是C++代码,则只保留函数的已损坏名称并以编码形式包含参数。Neil Butterworth的检查函数签名的建议是C++的好方法(因为参数经常被编码成函数,所以链接器可以区分<代码> > int x(int)“< /c>和<代码>”int x(浮点) >,但是,对于c,您将不得不动手分解函数,特别注意堆栈框架是如何在您的环境中构建和使用的


请记住,SPARC有一个旋转窗口堆栈,而不是常规的向下生长堆栈。您将真正深入研究CPU的工作方式。当然,如果你在说英特尔的Solaris,那么旋转堆栈就不存在了。Neil Butterworth的检查函数签名的建议对于C++是很好的(因为参数经常被编码成函数,所以链接器可以区分<代码> int x(int)”< /> >和<代码> int x(浮点)。例如)但是,对于C,您必须动手分解函数,特别注意堆栈框架是如何在您的环境中构建和使用的


请记住,SPARC有一个旋转窗口堆栈,而不是常规的向下生长堆栈。您将真正深入研究CPU的工作方式。如果您说的是Solaris for Intel,那么旋转堆栈当然不存在。

在最低级别,如果您模拟计算机上运行的函数,那么它将从寄存器或未写入的堆栈中读取一些信息。如果将这些读取与平台的ABI进行比较(您没有说明是Sparc Solaris还是Intel Solaris),则其中一些读取应与函数参数的寄存器/堆栈位置相对应。当然,不能保证函数将读取其所有参数


对于Solaris,可能会提供比nm更多的信息(google For Elf Dump快速签名表示已请求并添加了支持,但您需要检查您所获得的版本)

如果您模拟计算机上运行的功能,则在最低级别上,然后,它将从寄存器或尚未写入的堆栈中读取一些信息。如果将这些读取与平台的ABI进行比较(您没有说明是Sparc Solaris还是Intel Solaris),则其中一些读取应与函数参数的寄存器/堆栈位置相对应。当然,不能保证函数将读取其所有参数

对于Solaris,可能会提供比
nm
更多的信息(google For elfdump签名表明请求并添加了支持,但您需要检查您的版本)

IDA Pro()是一个反汇编程序,它非常擅长从目标代码推断函数的参数; 也许你也可以使用符号信息;在Win32上,符号_function@8显示传递了8个字节(2个参数) 也可以将C++名字分解成参数和类型< /p> IDA Pro(),它是一个反汇编程序,它非常巧妙地从目标代码中推断函数的参数; 也许你也可以使用符号信息;在Win32上,符号_function@8显示传递了8个字节(2个参数)
也可以将C++名字解散,得到参数和类型< /p>谢谢,Pete,如果我们可以运行二进制,那么PSTALE进程可以显示函数的参数个数,也可以显示这些参数的值。谢谢Pete,如果我们能运行二进制,就可以完成。然后pstack运行进程可以显示函数的参数数量,也可以显示这些参数的值。