main.cpp
1 #include <iostream>
2 #include <fstream>
3 #include <stdlib.h>
4 #include <windows.h>
5
6 using namespace std;
7
8 int main ( int argc, char* argv[] ) {
9 if ( argc != 4 ) {
10 cout << "Usage: ft <File> <Off> <Data>" << endl;
11 return -1;
12 }
13 fstream file ( argv[1], ios::in | ios::out | ios::binary | ios::ate );
14 if ( file.is_open() ) {
15 long long fileSize = static_cast<long long> ( file.tellg() );
16 cout << "Size: " << fileSize << " bytes" << endl;
17 long int yPos = strtol ( argv[2], NULL, 16 );
18 long int yData = strtol ( argv[3], NULL, 16 );
19 unsigned char sData = static_cast<unsigned char> ( yData );
20 if ( yPos < 0 || yPos >= fileSize ) {
21 cout << "Overflow. [0 ~ " << fileSize - 1 << "]" << endl;
22 return -1;
23 }
24 std::ios_base::seekdir sPos = static_cast<std::ios_base::seekdir> ( yPos );
25 file.seekg ( sPos );
26 char oldCbit[8], newCbit[8];
27 itoa ( file.get(), oldCbit, 16 );
28 itoa ( yData, newCbit, 16 );
29 cout << "Data: " << oldCbit << " --> " << newCbit << endl;
30 file.seekg ( sPos );
31 file << sData;
32 file.close();
33 while ( file.is_open() )
34 Sleep ( 1 );
35 cout << "Tampering successfully." << endl;
36 return 0;
37 } else {
38 cout << "Can not open file." << endl;
39 return -1;
40 }
41 }


来源:https://www.cnblogs.com/rms365/p/10868991.html