2010-04-01 79 views
1

所以。假設我要製作一個十六進制編輯器來編輯...哦...讓我們說一個.DLL文件。如何使用C#或C++編輯.DLL文件的十六進制?對於「固定部分」,我想讓它可以從程序中瀏覽特定的.DLL,在編程的文件上有一些預先編碼的按鈕,當按下按鈕時,它會自動執行請求的操作,這意味着該按鈕已預編碼,以知道在.DLL中查找什麼以及要將其更改爲什麼。任何人都可以幫助我開始呢?如何製作固定的十六進制編輯器?

另外,最好是C#。謝謝!

+0

到目前爲止您的方法是什麼? – 2010-04-01 01:22:23

+0

聽起來很神奇 – sisis 2010-04-01 01:22:44

+0

沒有辦法,因爲此刻,我的時間有點短,但春假即將到來,男人會感到無聊。 – Kevin 2010-04-01 01:28:50

回答

2

基礎非常簡單。

DLL或任何文件是一個字節流。

基本文件操作允許您讀取和寫入文件的任意部分。藝術術語基本上是「隨機訪問文件操作」。在C中,基本操作是read(),write()和lseek()。

讀取允許您讀取緩衝區中的字節流,寫入允許您爲文件寫入字節緩衝區,lseek允許您在文件中任意位置。

實施例:

int fd = open("test.dat", O_RDWR); 
off_t offset = lseek(fd, 200, SEEK_SET); 
if (off_t == -1) { 
    printf("Boom!\n"); 
    exit(1); 
}  
char buf[1024]; 
ssize_t bytes_read = read(fd, buf, 1024); 
offset = lseek(fd, 100, SEEK_SET); 
ssize_t bytes_written = write(fd, buf, 1024); 
flush(fd); 
close(fd); 

這從文件中讀取1024個字節,開始在該文件的第200個字節,然後將其寫回到在100個字節的文件。

一旦您可以更改文件中的隨機字節,就需要選擇要更改的字節,如何更改它們以及執行相應的讀取/寫入/寫入以進行更改。

請注意,這些是最原始的I/O操作,根據您的語言等可能會有更好的選擇,但它們都基於這些原語。

解釋文件的字節,顯示它們等。這是讀者的練習。但是這些基本的I/O功能爲您提供了更改文件的基礎知識。

0

如果想法是加載一個十六進制編輯框,你可以使用下面的代碼:Be.HexEditor 編輯一個文件的「十六進制」只不過是改變其中的字節。預編程改變的部分將是更一般的類型。但是對於實際查看,查找並選擇更改任何你想要的選項,Be.HexEditor是一個不錯的選擇。我在一年前使用它,我希望它有一些新功能,可以讓你的生活更輕鬆。

+0

該程序看起來不錯,但我不明白我將如何使用這個用於我的想法。 :\ – Kevin 2010-04-01 02:26:21

+0

它就像一個插件,它爲您提供了一個十六進制編輯框。就像我說的,編輯一個文件的「十六進制」只不過是改變它的字節。 如果你想這樣做,而沒有一個實際的編輯器(在谷歌查找「十六進制編輯器」,看看你得到什麼),你將需要像C#類,FileStream,BinaryReader和BinaryWriter的東西。 – SCV 2010-04-01 02:48:23

+0

這就是我想要的。調用程序中的函數來更改文件的字節。 – Kevin 2010-04-01 02:49:46