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