是否有可能在ppc / mips二进制文件中找到内存,字符串或类似的内存复制函数?

时间:2018-05-26 08:47:18

标签: binary mips reverse-engineering powerpc

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

1 个答案:

答案 0 :(得分:0)

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

首先,它不清楚你将什么归类为"副本"。如何区分四字节内存副本只需加载和存储大小相同的单词?

例如,如果我们编译它:

void assign(long *x, long *y)
{
    *x = *y;
}

void copy(void *x, void *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

其次,即使您对副本有特定的定义,检测其存在也很难可靠。

你可以实现一些寻找加载/存储/条件分支的一般模式的东西,但这只能找到memcpy实现的简单案例,以及那些由程序员实现的&#34;&#34;可以采取任何形式。