Binary 是否可以在ppc/mips二进制文件?;

Binary 是否可以在ppc/mips二进制文件?;,binary,mips,reverse-engineering,powerpc,Binary,Mips,Reverse Engineering,Powerpc,我刚开始分析PPC/MIPS中的ELF二进制文件。有一天,我有了一个想法,我想找到所有的字符串或内存复制函数,就像strcpy()、strncpy()、memcpy()、memmove()都是由程序员自己实现的。是否可以识别所有类似的内存复制功能?谢谢大家! 不是以100%可靠的方式。这里似乎有两个主要问题 首先,不清楚什么是“复制品”。如何区分一个四字节的内存拷贝和一个大小相同的字的加载和存储 例如,如果我们编译以下内容: void赋值(长*x,长*y) { *x=*y; } 无效副本(无效*

我刚开始分析PPC/MIPS中的ELF二进制文件。有一天,我有了一个想法,我想找到所有的字符串或内存复制函数,就像strcpy()、strncpy()、memcpy()、memmove()都是由程序员自己实现的。是否可以识别所有类似的内存复制功能?谢谢大家!

不是以100%可靠的方式。这里似乎有两个主要问题

首先,不清楚什么是“复制品”。如何区分一个四字节的内存拷贝和一个大小相同的字的加载和存储

例如,如果我们编译以下内容:

void赋值(长*x,长*y)
{
*x=*y;
}
无效副本(无效*x,无效*y)
{
memcpy(x,y,8);
}
我们得到的指令基本相同:

0000000000000000 <assign>:
   0:   00 00 24 e9     ld      r9,0(r4)
   4:   00 00 23 f9     std     r9,0(r3)
   8:   20 00 80 4e     blr

0000000000000020 <copy>:
  20:   00 00 24 e9     ld      r9,0(r4)
  24:   00 00 23 f9     std     r9,0(r3)
  28:   20 00 80 4e     blr
0000000000000000:
0:0024E9LD r9,0(r4)
4:00 00 23 f9标准r9,0(r3)
8:20 00 80 4e blr
0000000000000020 :
20:0024E9LD r9,0(r4)
24:00 00 23 f9标准r9,0(r3)
28:20 00 80 4e blr
其次,即使您对副本有一个特定的定义,也很难可靠地检测到副本的存在

您可以实现一些查找加载/存储/条件分支的一般模式的东西,但这只会找到memcpy实现的小情况,而那些“由程序员自己实现的”可以采取任何形式