2010-04-01 52 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