如何使用 Nim 在特定地址位置编辑二进制文件?

问题描述

我试图了解如何使用 Nim 修改 Windows 可执行文件以在文件的特定位置写入 nop。在 Python 中,我按如下方式执行此操作:

    with open('file.exe','r+b') as f:
        f.seek(0x0014bc0f)
        f.write(binascii.unhexlify('9090'))
        f.seek(0x0014bc18)
        f.write(binascii.unhexlify('9090'))

但是在 Nim 中我找不到必要的方法来完成对特定地址的查找以及如何正确输入这些操作码。我对 Nim 很陌生,不同的文件操作可能性有点令人困惑。

解决方法

io 的 docs 非常好,但要让您开始:

  • 打开文件进行读写(相当于'r+')是:
let f = open("file.exe",fmReadWriteExisting)
  • 此处相当于 with,以确保在出现任何错误时关闭文件:
defer: f.close
  • 寻找偏移量(默认为相对于开始的字节):
f.setFilePos(0x014bc0f)
  • 在那个位置写入两个字节 (nop nop)
f.write("\x90\x90")

查看每个 proc 的文档以获取更多选项