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