我的意思是,总是处于相同的偏移量或取决于编译吗?我认为这是一个很好的入门信息。
update:
好吧,但是在这一点上,我还有一个疑问,通常是从设备进行转储时( nand),您会得到一个经过压缩/加密的二进制文件,我们知道了闪存映射,它分为引导程序/引导加载程序和以后的应用程序,日志等...
我得到应用程序时主要是疑问简而言之,也许是一个根文件系统,也许是其他二进制文件,例如.rodata.bin ...所以在此之后,如何推论入口点?因为使用.elf非常容易(自动加载),但是对于提取的文件(通常是二进制文件),我无法推断出是否将入口点应用于这些提取的文件,或者试图找出进入主要二进制转储的入口点..可以在引导加载程序的一部分中拆卸主垃圾箱)
#1 楼
嵌入式系统通常在没有任何BIOS的裸机上运行。因此,入口点通常是体系结构和系统特定的复位向量。您需要查阅芯片或至少体系结构的数据表,以了解复位向量的含义。例如,在ARM上,默认复位向量位于地址0(Cortex-M系列除外) ),因此您通常可以从固件开始就开始拆卸。 i8051是另一个值得注意的示例,它从0开始。
对于MIPS,规范的复位向量为0xBFC00000。但是,这是一个处理器地址,您需要确定它在闪存中所映射的内容。这取决于闪存与CPU的连接方式,芯片选择的设置方式等。它很有可能实际上与闪存的开始相对应。
另一种方法,通常由较早的8使用位和16位芯片将复位向量放置在地址空间的末尾附近。因此,像FFFE这样的地址很适合那些地址。 8086从FFFF0开始,当前的x86芯片从FFFFFFF0开始。但是再次重申,如果您有任何数据表,则应检查它们而不是猜测。
评论
另外,ARM向量表可以位于0xFFFF0000。
– ixje
13年11月29日在18:27
评论
首先,您很幸运能够恢复指令。 Mips使用对齐的指令,因此您可以通过基本的线性扫描看到整个汇编代码。第二,入口点通常不是位于固件文件的顶部吗?或者,您是在谈论内存转储吗?好的,非常感谢您提供此信息,我知道您是Igor拆解的大师。非常感谢,我会继续努力。
好的,但是在这一点上,我还有一个疑问,通常当您从设备(北非)进行转储时,您会得到一个经过压缩/加密的二进制文件,我们知道了闪存映射,它分为bootstrap / bootloader和后来的应用程序,日志等...主要的疑问是当我以纯格式获取应用程序时,可能是根文件系统,也可能是其他二进制文件,例如.rodata.bin ...因此,在此之后,如何推断入口点?因为使用.elf非常容易(自动加载),但是对于提取的文件(通常是二进制文件),我无法推断出是否将入口点应用于这些提取的文件,或者试图找出进入主要二进制转储的入口点。