using namespace std;void main( )
{
int i=0;
cout<<"i="<<i<<endl; system("pause");
}
這段代碼編譯運行後的輸出毫無疑問是:i=0 ...現在我要做的事情是不修改源代碼的情況下,讓程序的輸出任何想輸出的數據。首先反匯編得到其對應的匯編源代碼。很容易找到int i=0;對應的匯編代碼,進而得到相應的機器二進制編碼:c7 45 f8。這壹串十六進制數字就是int i=0的機器代碼表示。然後利用UltraEdit直接打開程序的可執行文件,在其中搜索“c7 45 f8”,通常這樣的搜索會得到多個匹配的結果。在每壹個結果處,再查看後面的機器代碼與匯編後相應地方的機器代碼是否相符,如果相符,就說明找到了正確的地方。成功搜索後,會發現c7 45 f8後面跟上了四組00。第壹組代表壹個字節,因為目前使用的個人電腦壹般是32位,也就是四個字節,所以有四組00。也就是i的值,所以修改這個數字就可以改變可執行文件中二進制代碼所代表的變量值。由於我電腦使用的Intel x86構架,所以是little endian。把c7 45 f8 00 00 00 00 修改成:c7 45 f8 0f 00 00 00.保存修改,再次運行程序,發現程序的輸出為:i=15...