0

我用 iOS 制作了 2 个内存转储文件,我想看看这些文件之间的区别。我用 gdb 制作了它们(如果这很重要,idk)。我读了一个教程来做这些转储,他说:“7.比较你的 2 个转储(网上有大量关于如何比较转储的教程,Sketch 可能会写一个。)”我花了三个小时没有找到任何关于这个“ Sketch”,但我只找到了一个名为 Sketch 的 mac“绘画应用程序”。如果可能的话,我想在没有电脑的情况下完成这一切(我有 Windows 和 ubuntu),但如果不是还可以,没问题。我试过了cmp dump1.dmp dump2.dmpcmp -l dump1.dmp dump2.dmp什么也没发生。如果您能为我提供帮助,这将很重要 :) 感谢您的帮助 :)

4

1 回答 1

0

我想你想要两个二进制文件之间的区别。这是您可以开始使用的东西。

它计算两个文件中不同的 8 字节块的数量,但您可以修改它以满足您的需要。

#include <string>
#include <fstream>
#include <iostream>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdint.h>
#include <assert.h>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
using namespace std;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
uint64_t filebytes( ifstream & f ) {
    f.seekg( 0, f.end );
    const uint64_t l = f.tellg();
    f.seekg( 0, f.beg );

    return l;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
int main( int argc, char ** argv ) {

    assert( argc == 3 );

    ifstream file0( argv[1], ifstream::binary );
    ifstream file1( argv[2], ifstream::binary );

    assert( file0.is_open() );
    assert( file1.is_open() );
    assert( file0.good() );
    assert( file1.good() );

    const uint64_t f0bytes = filebytes( file0 );
    const uint64_t f1bytes = filebytes( file1 );
    assert( f0bytes == f1bytes );
    assert( f0bytes % sizeof( uint64_t ) == 0ULL );

    const uint64_t numWords = f0bytes / sizeof( uint64_t );

    uint64_t word0;
    uint64_t word1;
    uint64_t numDiffs = 0ULL;
    char * p0 = (char*) &word0;
    char * p1 = (char*) &word1;

    for( uint64_t wordIdx = 0ULL; wordIdx < numWords; wordIdx++ ) {

        file0.read( p0, sizeof( uint64_t ) );
        file1.read( p1, sizeof( uint64_t ) );

        if( word0 != word1 ) {
            numDiffs++;
        }

        assert( !file0.eof() );
        assert( !file1.eof() );
    }
    cout << "numWords = " << numWords << endl;
    cout << "numDiffs = " << numDiffs << endl;
    cout << "fraction = " << double( numDiffs ) / double( numWords ) << endl;

    return 0;
}
于 2013-09-13T22:29:05.657 回答