You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将汇编字节指令转换为可读的汇编指令字符串?

如何将汇编字节指令转换为可读的汇编指令字符串?

如果你想把类似 new byte[6]{ 233, 0, 0, 0, 0, 144} 这样的十进制字节数组转换成可读的汇编指令字符串,我这边分享下亲测有效的解决方案——用Capstone.Net这个基于Capstone反汇编框架的.NET绑定库。

我的实操步骤&踩坑记录

  • 首先找到9ee1开发的Capstone.Net项目,下载项目文件夹后尝试构建所有项目,结果CMD提示内存不足。我把项目配置里的内存值从80调整到180,又遇到了缺少capstone.dll(注意不是Gee.External.Capstone.dll)的问题。
  • 后来从项目的1.2.2版本发布包里找到了对应的capstone.dll,把它复制到修复后的CMD.exe目录下,程序终于正常运行了。

实际转换示例

  • 简单案例
    十进制字节:233,0,0,0,0,144
    转成十六进制:0xE9,0x00,0x00,0x00,0x00,0x90
    输入到X86代码段反汇编后得到:jmp 0x1005 | nop

  • 复杂案例
    十进制字节:139,78,4,185,0,0,0,0,184,0,0,0,0,137,69,216,233,0,0,0,0
    十六进制:8B 4E 04 B9 00 00 00 00 B8 00 00 00 00 89 45 D8 E9 00 00 00 00
    反汇编结果:mov ecx,[esi+4] | mov ecx,0 | mov [ebp-28],eax | jmp 0x1015

这样就能把原始的字节数组转换成你需要的可读汇编指令格式了,比如可以把结果整理成带占位符的字符串形式(像你举例的pokeEnable = @"call 0x{0:X} nop nop nop"这种),只需要根据反汇编出的指令替换对应的地址占位符就行。

内容的提问来源于stack exchange,提问作者Cortex

火山引擎 最新活动