这取决于上下文到底是什么。它是什么类型的二进制文件?你是在谈论磁盘上还是内存中?你用的是什么操作系统?
我强烈建议您使用一个反汇编引擎库,它使大多数这些问题都没有实际意义。凯普斯通不错。
如果你真的想自己做,你可以。例如,如果目标是 PE 文件,则需要将其映射到内存中。这意味着了解 PE 格式或使用诸如PeLib 之类的库。完成此操作后,您将需要搜索相关字符串。如果它是一个常量字符串,这通常在“.rdata”部分(标记为 RO)中,或者如果它是一个可变字符串,则在“.data”部分(标记为 RW)中。找到后,您需要扫描“.text”部分(标记为 RWE)以查找与字符串对应的地址。
这里有一些注意事项。首先,如果二进制文件被打包、用托管代码编写或由非标准编译器编译,这些节名称和保护可能会有所不同。这些相同的事情可能会导致任务变得非常复杂。
其次,您将不得不处理 ASLR。二进制文件将启用 ASLR,这意味着需要解析重定位表并将其应用于二进制文件以获取最终地址;否则它不会有 ASLR,这意味着所有地址都将假定0x00040000为基数,一旦找到它,在计算字符串的地址时就需要考虑到这一点(哦,你将二进制映射0x0006500到字符串是在0x00006516?您必须扫描地址(0x00006516 - 0x0006500) + 0x00040000)。这类似于您在应用重定位时需要执行的操作。
要记住的一件事是重定位可能很有用。通常,当它们存在时,它们会告诉每个使用二进制地址相对于基地址的偏移量。因此,您也可以只扫描重新定位的每个偏移量,检查其正确地址解析为包含目标字符串的偏移量。
我希望我能提供更多帮助,但这就是我可以根据您提供的信息提供的信息。希望它能让你朝着正确的方向前进。