c# - 如何制作固定的十六进制编辑器?

标签 c# c++ dll hex

所以。假设我要制作一个十六进制编辑器来编辑...哦...假设一个 .DLL 文件。如何使用 C# 或 C++ 编辑 .DLL 文件的十六进制?而对于“固定部分”,我想做到这样我就可以从程序中浏览特定的.DLL,在编程文件上有一些预编码的按钮,当按下按钮时,它会自动执行请求的操作,这意味着该按钮已预先编码以了解要在 .DLL 中查找什么以及将其更改为什么。谁能帮我开始做这件事?

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

最佳答案

基础非常简单。

DLL 或任何文件都是字节流。

基本文件操作允许您读取和写入文件的任意部分。技术术语基本上是“随机访问文件操作”。

在 C 中,基本操作是 read()、write() 和 lseek()。

read 允许您将字节流读入缓冲区,write 允许您将字节缓冲区写入文件,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);

这从文件的第 200 个字节开始读取 1024 个字节,然后在第 100 个字节处将其写回文件。

一旦您可以更改文件中的随机字节,接下来就是选择要更改的字节、如何更改它们以及执行适当的读取/查找/写入以进行更改的问题。

请注意,这些是最原始的 I/O 操作,根据您的语言等,您可能可以使用更好的操作。但它们都是基于这些原语的。

解释文件的字节,显示它们等等。这是给读者的练习。但这些基本的 I/O 功能为您提供了更改文件的基础知识。

关于c# - 如何制作固定的十六进制编辑器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557598/

相关文章:

c++ - 指针本身如何使它为 NULL?

ms-access - 以 PTRSAFE 和 UNICODE 安全方式从 VBA 将 LPCTSTR 参数传递给 API 调用

c# - MEF 和对象处理

c# - 在带有 Linq 的 Entity Framework 中使用 LIKE "%{%}%"?

c++ - 看似基本的C++问题

c++ - 托管 C++ dll 的加载程序锁定错误,静态链接到 native C++ 库

返回 'Attempted to read or write protected memory' 错误的 C# 等效于 VB DLL 函数声明

c# - 搜索全局地址列表/书籍

c# - 使用 Dapper 映射超过 5 种类型

c++ - 在 C++ 中对对象 vector 进行排序